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?

War es hilfreich?

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
scroll top