Ich arbeite an einem Hausaufgabenprojekt und soll eine Datenbankabfrage durchführen, bei der Flüge entweder anhand des Stadtnamens oder des Flughafencodes gefunden werden. Die flights
Tabelle enthält jedoch nur die Flughafencodes. Wenn ich also nach Stadt suchen möchte, muss ich dies tun mach mit auf dem airports
Tisch.
Die Flughafentabelle enthält die folgenden Spalten: code, city
Die Flugtabelle enthält die folgenden Spalten: airline, flt_no, fairport, tairport, depart, arrive, fare
Die Spalten fairport
und tairport
sind die Codes von und nach Flughafen.
Die Spalten depart
und arrive
sind Datum der Abreise und Ankunft.
Ich habe eine Abfrage erstellt, die zuerst die Flüge in der fairport
Spalte und in der airports.code
Spalte verbindet. Damit ich mit dem übereinstimmen kann, muss tairport
ich einen weiteren Join für die vorherigen Matches ab dem ersten Join durchführen.
SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
FROM (SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code
WHERE (airports.code = '?' OR airports.city='?')) AS matches
INNER JOIN airports
ON matches.tairport = airports.code
WHERE (airports.code = '?' OR airports.city = '?')
Meine Abfrage liefert die richtigen Ergebnisse und reicht für die Hausaufgaben aus. Ich frage mich jedoch, ob ich JOIN
mehrere Spalten bearbeiten kann. Wie würde ich die WHERE
Klausel so konstruieren , dass sie mit der Abfahrt und der Zielstadt / dem Zielcode übereinstimmt?
Unten ist eine "Pseudo-Abfrage" zu dem, was ich erreichen möchte, aber ich kann die Syntax nicht richtig verstehen und ich weiß nicht, wie ich die airports
Tabelle für die Abflüge und die Ziele darstellen soll:
SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code AND flights.tairport = airports.code
WHERE (airports.code = 'departureCode' OR airports.city= 'departureCity')
AND (airports.code = 'destinationCode' OR airports.city = 'destinationCity')
Aktualisieren
Ich fand diese visuelle Darstellung von SQL Join-Anweisungen auch sehr hilfreich als allgemeine Anleitung zum Erstellen von SQL-Anweisungen!
Antworten:
Sie können mit derselben Tabelle mehrmals beitreten, indem Sie den verknüpften Tabellen einen Alias geben , wie im folgenden Beispiel:
Beachten Sie, dass die
to_port
undfrom_port
Aliase für die erste und zweite Kopie derairports
Tabelle sind.quelle
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Bitte vorschlagen.etwas wie....
quelle
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Macht es einen Unterschied? Was denken Sie?Wenn MySQL für Sie in Ordnung ist:
Bearbeiten: Beispiel hinzugefügt, um die Ausgabe nach Code oder Stadt zu filtern
quelle
Können Sie einfach und in der on-Klausel verwenden?
Zum Beispiel so etwas wie:
quelle
Wenn Sie sowohl auf FROM- als auch auf TO-Flughäfen suchen möchten, möchten Sie zweimal an der Airports-Tabelle teilnehmen. Anschließend können Sie sowohl From- als auch To-Tabellen in Ihrer Ergebnismenge verwenden:
quelle