Wie verwende ich mit MySQL einen Left Join zweimal in derselben Spalte?
Frage
Ich habe zwei Tabellen, eine für Flughäfen und eine für Routen.
Flughäfen sehen in etwa so aus
Airports
-------------------------------------
id | code | name |
-------------------------------------
01 | LGW | London Gatwick |
-------------------------------------
02 | LHR | London Gatwick |
und so weiter....
und noch eine für Routen wie diese
Routes
---------------------------
id | ORIGIN | DESTINATION |
---------------------------
01 | LGW | VCE |
---------------------------
02 | TSF | LHR |
und so weiter...
Ich muss Routen aus der Tabelle auswählen, möchte aber auch die Flughafennamen erhalten.Das Verwirrende daran ist, dass ich den Flughafencode zweimal abfragen muss.Ich versuche so etwas
SELECT routes.*, airports.name as origin_name FROM routes
LEFT JOIN airports ON airports.IATA = routes.origin
LEFT JOIN airports ON airports.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
Was Sie vielleicht wissen oder auch nicht wissen, funktioniert nicht.Wie würde ich das machen?
Lösung
Aliase:
SELECT
routes.*,
a1.name AS origin_name,
a2.name AS destination_name
FROM routes r
LEFT JOIN airports a1 ON a1.IATA = r.origin
LEFT JOIN airports a2 ON a1.IATA = r.destination
WHERE
r.origin = 'LHR' AND r.destination = 'VCE' OR r.origin = 'VCE'
Andere Tipps
So gibt der Tabelle zwei verschiedene Aliase. So etwas wie (nicht getestet);
SELECT routes.*, o.name as origin, d.name as destination FROM routes
LEFT JOIN airports o ON o.IATA = routes.origin
LEFT JOIN airports d ON d.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
Sie müssen die FLUGHÄFEN Tabelle hinzufügen zweimal Aliase ....
SELECT ORIGIN_AIRPORT.NAME,
DESTINATION_AIRPORT.NAME
FROM AIRPORTS ORIGIN_AIRPORT,
AIRPORTS DESTINATION_AIRPORT,
ROUTES
WHERE ROUTES.ORIGIN = ORIGIN_AIRPORT.CODE
AND ROUTES.DESTINATION = DESTINATION_AIRPORT.CODE;
Fügen Sie den Tabellennamen einen Alias hinzu:
SELECT routes.*, a1.name as origin_name FROM routes
LEFT JOIN airports AS a1 ON a1.IATA = routes.origin
LEFT JOIN airports AS a2 ON a2.IATA = routes.destination
WHERE origin = 'LHR' AND destination = 'VCE' OR origin = 'VCE'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow