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 flights
tabela contém apenas os códigos do aeroporto, portanto, se eu quiser pesquisar por cidade, preciso junte-se à airports
mesa.
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 fairport
e tairport
são os códigos de e para o aeroporto.
As colunas depart
e arrive
são datas de partida e chegada.
Eu vim com uma consulta que primeiro une os vôos na fairport
coluna e na airports.code
coluna. Para que eu corresponda, tairport
eu 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 JOIN
em várias colunas? Como construir a WHERE
clá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 airports
tabela 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!