Zwei Joins auf dieselbe Tabelle

akmut

Neuer Benutzer
Beiträge
2
Hallo liebes Datenbank-Forum,

bei einer MySQL-Abfrage komme ich nicht weiter und würde mich über etwas Unterstützung sehr freuen.
Ich hab folgende 2 Tabelle, Personen und Metadaten

(Personen)
ID | Name | Geschlecht | Geburtsdatum
------------------------------------------------
1 | Peter Meier | M | 07.10.1992
2 | Sandra Rosa | W | 13.06.1989
3 | Klaus Wendt | M | 05.03.1995


(Metadaten)
ID | Bezeichner | Wert
--------------------------------------
1 | Adresse | Kreis Strasse 5
1 | Ort | Hamburg
1 | ... | ...
2 | Adresse | Brücken Weg 12
2 | Ort | Bremen
2 | ... | ...
3 | Adresse | Waldstrasse 9
3 | Ort | Hannover
3 | ... | ...


Diese muss ich so verknüpfen, dass die eine Ausgabe erhalte, die wie folgt aussehen sollte:
ID | Name | Adresse | Ort
------------------------------------------------
1 | Peter Meier | Kreis Strasse 5 | Hamburg
2 | Sandra Rosa | Brücken Weg 12 | Bremen
3 | Klaus Wendt | Waldstrasse 9 | Hannover


Code:
SELECT Personen.ID, Personen.Name, Metadaten.Wert As 'Adresse'
FROM Personen
Left JOIN Metadaten
ON Personen.ID = Metadaten.ID
WHERE Metadaten.Bezeichner = 'Adresse'

Mit dieser Abfrage bekomme ich die Adresse der jeweiligen Person angezeigt, aber bekomme es nicht hin einen weiteren Join zur selben Tabelle zu machen, dort den Ort abzufragen und als weitere Spalte (wie oben) anzuzeigen. Könnt ihr mir weiterhelfen?
 
Werbung:
gibt der tabelle metadatein beim join einen alias, also etwa: left join metadaten m1 on ... left join metadaten m2 on ... und verwende überall den korrekten alias.
 
Werbung:
Danke für den Hinweis.

Habs jetzt soweit, dass zumindest das Ergebnis eigentlich ganz gut aussieht.
Kannst du vielleicht mal schauen ob ich nicht ein logischen Fehler habe?

Code:
SELECT Personen.ID,
       Personen.Name,
       Metadaten1.Bezeichner AS Adresse,
       Metadaten2.Bezeichner AS Ort
FROM Personen
LEFT JOIN Metadaten AS Metadaten1
    ON Personen.ID = Metadaten1.ID
LEFT JOIN Metadaten AS Metadaten2
    ON Personen.ID = Metadaten2.ID
Where Metadaten1.Bezeichner = 'Adresse' AND Metadaten2.Bezeichner = 'Ort'
 
Zurück
Oben