SQl Abfrage mit COUNT etc

Hallo Liebe User,

ich habe kaum Erfahrung mit SQL, daher bräuchte ich Hilfe bzgl. dieser Aufgabe:

Gegeben sind 3 Tabellen:

Tabelle 1: „Artikel“ mit bspw:
Artikel_id ,
Artikel_Name,

Tabelle 2: „Kategorie“ mit bspw:
Kategorie_id,
Kategorie_Name,
categorie_parent

Tabelle 3: „Artikel_Kategorie“ mit:
Artikel_Kategorie_id,
fk_Artikel_id,
fk_Kategorie_id.

  1. Kann mir jemand die Beziehungen zwischen diesen 3 Tabellen erklären? Warum wird denn zusätzlich die 3. Tabellle erzeugt?

  2. Ich möchte gerne Wissen:

  • Wie viel Artikel existieren,
  • Wie viel Hauptkategorien und Unterkategorien existieren,
  • Die Unterkategien den jeweiligen Hauptkategorien zuordnen-
  • Wie viele Artikel existieren in der jeweiligen Haupt und Unterkategorie
    (Die Anzahl bzw. Summe).

Wie würde das denn als verschachtelte SQL Abfrage aussehen?

Ich bin blutiger Anfäger daher würde ich mich eine schnelle Hilfe sehr sehr sehr freuen!

Viele Grüße,
Water

Hallo lieber Water,

die dritte Tabelle wird gebildet, damit man einen Artikel mehreren Kategorien zuordnen kann. Die Tabelle „Artikel_Kategorie“ verbindet Artikel und Kategorie. Ein Artikel ist einer Kategorie zugeordnet, wenn es einen Satz in dieser Tabelle gibt, die die Artikel_ID in fk_Artikel_ID und die Kategorie_ID in fk_Kategorie_ID enthält.

Die Anzahl der überhaupt vorhandenen Kategorien erhält man mit
Select count(*) from kategorie;
vorausgesetzt, dass jede Kategorie nur einmal vorkommt und dass keine alten, nicht mehr nutzbaren Kategorien vorhanden sind (logisch gelöschte Kategorien).

Auf die Hauptkategorieen schränkt man die Menge ein, indem man nur die Sätze mit categorie_parent is nil wählt:
Select count(*) from kategorie where categorie_parent is nil ;

Analog erhältman die Zahl der Artikel mit
select count(*) from artikel;

Wieviele Artikel je Unterkategorie liefert:

select hk.Kategorie_Name, uk.Kategorie_Name, count (artikel_id) from artikel a, kategorie hk, kategorie uk
where a.kategorie_id = uk.Kategorie_id
and uk.categorie_parent = hk.Kategorie_Name
and hk.categorie_parent is nil
group by hk.Kategorie_Name, hk.Kategorie_Name

Achtung! die Artikelanzahl in der Hauptkategorie ist gleich der Summe aller Artikel, die dieser Hauptkategorie direkt oder indirekt über eine Unterkategorie zugeordnet sind.

Da es keine Angabe über die Anzahl der kategorieebenen gibt, wird diese Ermittlung beliebig kompliziert, weil mit sql keine Rekursiven Abfragen in einem Schritt machbar sind.

Falls Sie dafür eine Lösung finden, wäre ich daran sehr interessiert.

Gruß
Karl Gutheil