JOIN über mehrere Tabellen
Chris
- datenbank
Hallo,
ich stecke irgendwie bei einer SQL-Anweisung fest: Ich habe eine Haupttabelle und 3 Nebentabellen die ich alle mit LEFT JOIN verbinden möchte. Alle 4 Tabellen haben eine "herstellernr" gemeinsam.
Jetzt möchte ich aber nur die Inhalte von den 3 Nebentabellen anzeigen lassen, welche NICHT mit der "herstellernr" in der Haupttabelle vorkommen. Wie müsste ich da rangehen? Weil, ich brauch doch schon allein die "herstellernr" zum joinen oder?
Grüße
Christoph
yo,
stichwort outer joins:
SELECT t2.spalte1, t2.spalte2
FROM nebentabelle t2
LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
WHERE t1.herstellernr IS NULL
Ilja
hi
stichwort outer joins:
SELECT t2.spalte1, t2.spalte2
FROM nebentabelle t2
LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
WHERE t1.herstellernr IS NULL
Ok, dann sollte ich wohl auch OUTER JOIN schreiben ;) Aber du meinst sicherlich das Richtige, hehe. Ich werd's mal ausprobieren.
Chris
Ok,
noch eine Frage:
Wäre das so richtig für alle 3 Nebentabellen?
SELECT t1.herstellernr, t2.*, t3.*, t4.*
FROM nebentabelle1 t2
LEFT OUTER JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
LEFT OUTER JOIN nebentabelle2 t3 ON t3.herstellernr = t2.herstellernr
LEFT OUTER JOIN nebentabelle3 t4 ON t4.herstellernr = t2.herstellernr
WHERE t1.herstellernr IS NULL
Grüße
Christoph
yo,
Wäre das so richtig für alle 3 Nebentabellen?
nein, so geht es nicht. zum einen macht es keinen sinn, die spalte t1.herstellernr auszugaben, wenn du weiter unten in der where klausel dort nach nur null werten abfragst. zum anderen nehme ich an, dass du mit neben und haupttabelle meinst, dass die nebenschlüssel einen fremdschlüssel (herstellernr) der haupttabelle enthalten, du joinst aber unter anderem die nebentabelle t2 mit anderen nebentabellen.
das beste ist wohl, du nimmst die abfrage aus meinem ersten beispiel (die OUTER klausel kann man ruhig weglassen, also LEFT JOIN reicht vollkommen aus) und machst das gleiche für alle andere "nebentabellen" und verbindest die drei sql anweisung mit UNION ALL, wobei zu beachten ist, dass die spaltenanzahl nach der select klausel gleich sein muss.
SELECT t2.spalte1, t2.spalte2
FROM nebentabelle t2
LEFT JOIN haupttabelle t1 ON t1.herstellernr = t2.herstellernr
WHERE t1.herstellernr IS NULL
UNION ALL
SELECT t3.spalte1, t3.spalte2
FROM nebentabelle t3
LEFT JOIN haupttabelle t1 ON t1.herstellernr = t3.herstellernr
WHERE t1.herstellernr IS NULL
UNION ALL
SELECT t4.spalte1, t4.spalte2
FROM nebentabelle t4
LEFT JOIN haupttabelle t1 ON t1.herstellernr = t4.herstellernr
WHERE t1.herstellernr IS NULL
Ilja