Pracuję nad projektem domowym i mam wykonać zapytanie do bazy danych, które wyszuka loty według nazwy miasta lub kodu lotniska, ale flights
tabela zawiera tylko kody lotnisk, więc jeśli chcę szukać według miasta, muszę dołączyć do airports
stołu.
Tabela lotnisk zawiera następujące kolumny: code, city
Tabela lotów zawiera następujące kolumny: airline, flt_no, fairport, tairport, depart, arrive, fare
Kolumny fairport
i tairport
to kody lotnisk od i do .
Kolumny depart
i arrive
są datami wyjazdu i przyjazdu.
Wpadłem z zapytaniem, które najpierw łączy loty na fairport
kolumnie i airports.code
kolumnie. Aby dopasować połączenie, tairport
muszę wykonać inne złączenie na poprzednich meczach z pierwszego złączenia.
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 = '?')
Moje zapytanie zwraca prawidłowe wyniki i wystarczy do zadania domowego, ale zastanawiam się, czy mogę JOIN
w wielu kolumnach? Jak skonstruować WHERE
klauzulę, aby pasowała do miejsca wylotu i miasta / kodu docelowego?
Poniżej znajduje się „pseudo-zapytanie” dotyczące tego, co chcę osiągnąć, ale nie mogę poprawnie uzyskać składni i nie wiem, jak przedstawić airports
tabelę odlotów i miejsc docelowych:
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')
Aktualizacja
Zauważyłem również, że ta wizualna reprezentacja instrukcji SQL Join jest bardzo pomocna jako ogólny przewodnik dotyczący konstruowania instrukcji SQL!
Odpowiedzi:
Możesz DOŁĄCZAĆ do tej samej tabeli więcej niż raz, nadając połączonym tabelom alias , jak w poniższym przykładzie:
Zauważ, że
to_port
ifrom_port
są aliasami dla pierwszej i drugiej kopiiairports
tabeli.źródło
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
proszę o sugestię.coś jak....
źródło
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
czy to ma znaczenie? Co myślisz?jeśli mysql jest dla Ciebie w porządku:
edit: dodany przykład filtrowania danych wyjściowych dla kodu lub miasta
źródło
Czy możesz po prostu użyć i w klauzuli on?
Na przykład coś takiego:
źródło
Jeśli chcesz wyszukiwać zarówno na lotniskach OD, jak i DO, zechcesz dwukrotnie dołączyć do tabeli Lotniska - wtedy możesz użyć zarówno tabel od, jak i do w swoim zestawie wyników:
źródło