Vinzenz Mai: Abfrage über 3 Tabellen

Beitrag lesen

Hallo Micha,

Deine grausame Schreibweise macht das Lesen und Verstehen Deines Anliegens leider sehr schwer.

content, sub1 und sub2

Wähle doch bitte aussagekräftigere Namen, Du machst Dir selbst und anderen das Leben leichter. Gleiches gilt für Deine Spaltennamen. Du kannst Spalten in verschiedenen Tabellen gleich benennen, das ist in Deinem Fall sogar sinnvoll.

in der haupt habe ich Artikel

ich nehme mal an, dass gilt: haupt = content :-)

classe#artikelcode#bezeichnung# der code und die bezeichnung kommen hier nur einmal vor

So fände ich das wesentlich lesbarer:

Classe   Artikelcode  Bezeichnung
---------------------------------
Artikel  A1           Artikel_1
Artikel  A2           Artikel_2


Gruppe  G1  Name der Gruppe1
Gruppe  G2  Name der Gruppe2

in der sub1 habe ich die Gruppen den die Artikel zugeordnet wurden

Gruppe  Artikel

G1      A1
G1      A2
G1      A3
G1      A4
G2      A5

Kommt jeder Artikel nur in einer Gruppe vor? So scheint es. Und dann gilt:

Die Tabelle sub1 kommt mir (ausnahmsweise) überflüssig vor, Du könntest diese Information ohne Verlust und ohne Redundanz in Deine Tabelle haupt/content mit aufnehmen

in der sub2 dann sie Verknüfung zur Anzeige
Anzeige    Artikel_sub2

irgendwas  A2
irgendwas  A2
irgendwas  A3

Mit meinem Wissen bekomme ich eine Abfrage hin die mir Zeigt welche Gruppen zum Artikel gehören

  

> Select content.bez, content.artikelcode  
> From content, sub1  
> Where content.artikelcode = sub1.artikel  

Besser formulierst Du dies als JOIN, denn es ist ein JOIN. (Siehe dazu auch https://forum.selfhtml.org/?t=119395&m=766062, ein Vorblick auf die Featureartikel von Rouven und mir zu Joins.)

  
SELECT  
  bez,  
  artikelcode  
FROM content  
INNER JOIN sub1  
ON content.artikelcode = sub1.artikel  

Wie bekomme ich das aber hin das ich auch die Daten von der Tabelle sub2 in meine Abfrage bekomme mit einem cont Feld das mir die Artikel in der sub2 zählt

Bevor Du anfängst zu zählen, solltest Du zuerst alle Spalten zusammenbringen und

Wenn A1 nicht in der Sub2 aufgeführt wird soll es aber  trotzdem erscheinen mit Count 0

mit dieser Bedingung verlangst Du einen LEFT JOIN :-) (steht alles in den neuen Feature-Artikeln)

  
SELECT  
  Bez,  
  Artikelcode,  
  Gruppe,  
  sub2.artikel_sub2  
FROM (content  
INNER JOIN sub1  
ON content.artikelcode = sub1.artikel)  
LEFT OUTER JOIN sub2  
ON content.artikelcode = sub2.artikel_sub2  

Da die Bezeichnung und die Gruppe eindeutig vom Artikelcode abhängen kannst Du wunderbar danach gruppieren und die Spalte sub2.artikel_sub2 zählen :-)

Artikel #A1 # Artikel_1# G1# count 0
Artikel #A2 # Artikel_2# G1# count 2

  
SELECT  
  Artikelcode,  
  Bez,  
  Gruppe,  
  COUNT(artikel_sub2) AS Anzahl -- gib der Spalte einen Namen  
FROM (content  
INNER JOIN sub1  
ON content.artikelcode = sub1.artikel)  
LEFT OUTER JOIN sub2  
ON content.artikelcode = sub2.artikel_sub2  
GROUP BY Artikelcode, Bez, Anzeige, Gruppe  

Ist das irgendwie machbar

sollte es tun, auch wenn es nicht getestet ist.

Freundliche Grüße

Vinzenz