Abfrage über 3 Tabellen
Micha
- datenbank
0 Vinzenz Mai0 Micha
Hallo,
ich habe ein Abfrageproblem
die Abfrage geht über 3 Tabellen
content, sub1 und sub2
in der haupt habe ich Artikel
classe#artikelcode#bezeichnung# der code und die bezeichnung kommen hier nur einmal vor
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
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
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
Wenn A1 nicht in der Sub2 aufgeführt wird soll es aber trotzdem erscheinen mit Count 0
Artikel #A1 # Artikel_1# G1# count 0
Artikel #A2 # Artikel_2# G1# count 2
Ist das irgendwie machbar
Vielen Dank
Micha
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_sub2irgendwas 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
Hallo Vinzenz,
Deine grausame Schreibweise macht das Lesen und Verstehen Deines Anliegens leider sehr schwer.
Sorry, das tut mir leid, ich wusste nicht wie ich mich ausdrücken sollte.
Deine Antwort hat mir sehr geholfen.
Was echt cool ist, du hast es erklärt, so das ich es verstanden habe.
Vielen Dank
Miche