Estou trabalhando em um projeto de lição de casa e devo executar uma consulta ao banco de dados que encontre voos pelo nome da cidade ou pelo código do aeroporto, mas a flightstabela contém apenas os códigos do aeroporto, portanto, se eu quiser pesquisar por cidade, preciso junte-se à airportsmesa.
A tabela de aeroportos possui as seguintes colunas: code, city
A tabela de vôos possui as seguintes colunas: airline, flt_no, fairport, tairport, depart, arrive, fare
As colunas fairporte tairportsão os códigos de e para o aeroporto.
As colunas departe arrivesão datas de partida e chegada.
Eu vim com uma consulta que primeiro une os vôos na fairportcoluna e na airports.codecoluna. Para que eu corresponda, tairporteu tenho que realizar outra associação nas partidas anteriores a partir da primeira associação.
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 = '?')
Minha consulta retorna os resultados adequados e será suficiente para a finalidade da lição de casa, mas estou me perguntando se posso JOINem várias colunas? Como construir a WHEREcláusula para que ela corresponda à cidade / código de partida e de destino?
Abaixo está uma "pseudo-consulta" sobre o que quero obter, mas não consigo obter a sintaxe corretamente e não sei como representar a airportstabela para as partidas e os destinos:
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')
Atualizar
Eu também encontrei esta representação visual do SQL Junte declarações para ser muito útil como um guia geral sobre como construir instruções SQL!