Join mit mehreren "ON"s aus einer Tabelle

MysterioJN

SQL-Guru
Beiträge
158
Ja, ich weiß, ist dämlich betitelt. Weiß auch nicht genau wie ich es beschreiben/benennen soll.

Hier die Stammtabelle der Kategorien:
ID / Kategorie
2 / Landwirtschaft
3 / Ernährung
4 / Lebensmittel
7 / Physilogisch
9 / was auch immer



Hier der Aufbau der Hilfstabelle:

ID / KategorieID1 / KategorieID2 / KategorieID3
1 / 2 / 3 / 7
2 / 4 / 9 / Null


Wie muss mein Join aussehen, wenn ich im SELECT statt der KategorieID1, KategorieID2 und KategorieID3 die jeweiligen Kategorienamen (aus der Tabelle Kategorie) anzeigen lassen will?

Was er nicht erlaubt ist (da Stammtabelle mehrfach vorkommt):
Code:
FROM "Hilfstabelle"
LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID1 = Stammtabelle.ID
LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID2 = Stammtabelle.ID
LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID3 = Stammtabelle.ID


Geht das irgendwie in eine Zeile mit IN() ?? Aber das hat bei mir nicht geklappt:
Code:
FROM "Hilfstabelle"
LEFT JOIN "Stammtabelle" ON IN(Hilfstabelle.KategorieID1, Hilfstabelle.KategorieID2, Hilfstabelle.KategorieID3) = Stammtabelle.ID


Hab jetzt eine Woche Urlaub. Vlt. komm ich ja danach dank eurer eventuellen Hilfe weiter.

Beste Grüße euer Myst
 
Werbung:
Nein. Dein Ansatz mit den 3 JOIN-Befehlen ist schon richtig. Du mußt jedes Mal aber der gejointen Tabelle einen Alias geben, mit dem Du dann zugreifen kannst.

a la

select ... from ... left join kategorien k1 on ... left join kategorien k2 on ...


Und dann kannst Du vis k1.<spalte> jeweils drauf zugreifen.
 
'Ich muss doch noch mal nachhaken. Kam erst heute dazu, mich nochmal daran zusetzten. Irgendwie ist aber nicht mein Tag heute.

Hier die Stammtabelle der Kategorien mit den IDs und den entsprechenden NAMEN:
ID / Kategorie
2 / Landwirtschaft
3 / Ernährung
4 / Lebensmittel
7 / Physilogisch
9 / was auch immer



Hier der Aufbau der Hilfstabelle:
ID / KategorieID1 / KategorieID2 / KategorieID3
1 / 2 / 3 / 7
2 / 4 / 9 / Null


Also nochmal: Statt zahlen möchte ich Namen im HilfstabellenSelect stehen haben.

Das Ergebnis zeigt aber in allen Spalten den selben Inhalt an UND zudem nur EINEN Kategorienamen, obwohl die Datenzeile in der Hilfstabelle mehrere Zuordnungen hat.

Code:
SELECT

Stammtabelle.Name K1,
Stammtabelle.Name K2,
Stammtabelle.Name K3

FROM Hilfstabelle
LEFT JOIN Stammtabelle  ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID1)
LEFT JOIN Stammtabelle K2 ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID2)
LEFT JOIN Stammtabelle K3 ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID3)
 
Zuletzt bearbeitet:
Bzw. hier eine andere Variante (klappt aber nicht, da er die Spaltennamen als "ungültig" definiert nach den Kürzeln K1, K2, K3 und HT1

Code:
SELECT

K1.Stammtabelle.Name,
K2.Stammtabelle.Name,
K3.Stammtabelle.Name

FROM Hilfstabelle HT1
LEFT JOIN Stammtabelle K1 ON  (K1.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID1)
LEFT JOIN Stammtabelle K2 ON  (K2.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID2)
LEFT JOIN Stammtabelle K3 ON  (K3.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID3)
 
Wenn du einen Alias vergibst brauchst du nicht mehr den Tabellennamen.
Code:
SELECT
HT1.ID,
K1.Name,
K2.Name,
K3.Name
FROM Hilfstabelle HT1
LEFT JOIN Stammtabelle K1 ON (K1.ID = HT1.KategorieID1)
LEFT JOIN Stammtabelle K2 ON (K2.ID = HT1.KategorieID2)
LEFT JOIN Stammtabelle K3 ON (K3.ID = HT1.KategorieID3)
 
Werbung:
Zurück
Oben