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!
Respostas:
Você pode ingressar na mesma tabela mais de uma vez, atribuindo um alias às tabelas unidas , como no exemplo a seguir:
Observe que os alias
to_port
efrom_port
são para a primeira e a segunda cópias daairports
tabela.fonte
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Por favor, sugira.algo como....
fonte
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Isso faz alguma diferença? O que você acha?se o mysql estiver correto para você:
edit: exemplo adicionado para filtrar a saída para código ou cidade
fonte
Você pode apenas usar e na cláusula on?
Por exemplo, algo como:
fonte
Se você deseja pesquisar nos aeroportos FROM e TO, participará da tabela Aeroportos duas vezes - poderá usar as tabelas from e to em seu conjunto de resultados:
fonte