join unmöglich?
alex
- datenbank
1 Christian Seiler0 Vinzenz Mai0 alex
0 alex
Huhu, folgende konstellation:
2 Tabellen
----------
1. Tabelle (Tab1): ID, Name
2. Tabelle (Tab2): ID, ID1, ID2
Beim SELECT von Tab2 möchte ich gleich die ID1 und ID2 umgewandelt haben in Namen der Tab1
Beispiel:
Tab1:
1|Hugo
2|Bert
Tab2:
1|1|2
SELECT Tab2.ID, Tab1.Name as Name1, Tab1.Name as Name2 WHERE ...
und genau das ist der springende Punkt, ich weiss nicht wie ich die WHERE Klausel logisch aufbauen soll, entweder zeigt er mir nichts an:
WHERE Tab2.ID1=Tab1.ID AND Tab2.ID2=Tab1.ID => EMPTY
oder er zeigt es mir unbrauchbar doppelt:
WHERE Tab2.ID1=Tab1.ID OR Tab2.ID2=Tab1.ID =>
Hugo|Hugo
Bert|Bert
gewünscht ist aber:
Hugo|Bert
jetzt die Frage, kann man das verknüpfen, wenn ja wie?
danke, alex
Hallo alex,
jetzt die Frage, kann man das verknüpfen, wenn ja wie?
Ja, kann man. Du musst dem DBMS weismachen, dass es inwirklichkeit 3 Tabellen verknüpft:
Tab1 (ID) ----> (ID1) Tab2 (ID2) ----> (ID) Tab1
Das kannst Du machen, indem Du unterschiedliche Aliases für die Tabelle Tab1 definierst und diese mehrfach im Join auftauchen lässt.
SELECT
Tab2.ID,
Tab1_1.Name as Name1, -- Tab1_1 ist der erste Alias für Tab1
Tab1_2.Name as Name2 -- Tab1_2 ist der zweite Alias für Tab1
FROM
Tab2,
Tab1 as Tab1_1, -- hier wird der erste Alias definiert
Tab1 as Tab1_2 -- hier wird der zweite Alias definiert
WHERE
Tab2.ID1 = Tab1_1.ID -- erste Verknüpfung
AND
Tab2.ID2 = Tab1_2.ID; -- zweite Verknüpfung
Damit erhälst Du das gewünschte Ergebnis - vorausgesetzt, ich habe Dich richtig verstanden.
Viele Grüße,
Christian
Hallo Christian,
Ja, kann man. Du musst dem DBMS weismachen, dass es inwirklichkeit 3 Tabellen verknüpft:
Tab1 (ID) ----> (ID1) Tab2 (ID2) ----> (ID) Tab1
Das kannst Du machen, indem Du unterschiedliche Aliases für die Tabelle Tab1 definierst und diese mehrfach im Join auftauchen lässt.
Mit JOIN-Syntax liest sich Dein SQL-Statement einfach schöner :-)
SELECT
Tab2.ID,
Tab1_1.Name as Name1, -- Tab1_1 ist der erste Alias für Tab1
Tab1_2.Name as Name2 -- Tab1_2 ist der zweite Alias für Tab1
FROM
Tab1 Tab1_1 -- hier wird der erste Alias definiert
INNER JOIN Tab2
ON Tab2.ID1 = Tab1_1.ID -- erste Verknüpfung
INNER JOIN Tab1 Tab1_2 -- hier wird der zweite Alias definiert
ON Tab2.ID2 = Tab1_2.ID; -- zweite Verknüpfung
Freundliche Grüße
Vinzenz
Aus Kompatibilitätsgründen zu Oracle habe ich AS zwischen Tabellennamen und Tabellenalias gestrichen.
danke auch dir für die antwort, hab dein CODE aber nicht so schnell hinbekommen, muß ich mir nochmal in ruhe anschauen...
bin auf jeden fall erstmal etwas schlauer .-)
grüße
alex
Hallo Christian,
Ja, kann man. Du musst dem DBMS weismachen, dass es inwirklichkeit 3 Tabellen verknüpft:
Tab1 (ID) ----> (ID1) Tab2 (ID2) ----> (ID) Tab1
Das kannst Du machen, indem Du unterschiedliche Aliases für die Tabelle Tab1 definierst und diese mehrfach im Join auftauchen lässt.
Mit JOIN-Syntax liest sich Dein SQL-Statement einfach schöner :-)
SELECT
Tab2.ID,
Tab1_1.Name as Name1, -- Tab1_1 ist der erste Alias für Tab1
Tab1_2.Name as Name2 -- Tab1_2 ist der zweite Alias für Tab1
FROM
Tab1 Tab1_1 -- hier wird der erste Alias definiert
INNER JOIN Tab2
ON Tab2.ID1 = Tab1_1.ID -- erste Verknüpfung
INNER JOIN Tab1 Tab1_2 -- hier wird der zweite Alias definiert
ON Tab2.ID2 = Tab1_2.ID; -- zweite Verknüpfung
>
>
> Freundliche Grüße
>
> Vinzenz
>
> Aus Kompatibilitätsgründen zu Oracle habe ich AS zwischen Tabellennamen und Tabellenalias gestrichen.
>
Suuuuper.
Die Lösung ist einfach und verständlich. Funzt soweit auch, habs eben getestet. Wußte bisher nicht das man die Aliase auch später in FROM definieren darf .-)
big thx
alex