Estoy trabajando en un proyecto de tarea y se supone que debo realizar una consulta en la base de datos que encuentre vuelos, ya sea por el nombre de la ciudad o el código del aeropuerto, pero la flights
tabla solo contiene los códigos del aeropuerto, así que si quiero buscar por ciudad, tengo que únete en la airports
mesa.
La tabla de aeropuertos tiene las siguientes columnas: code, city
la mesa de vuelos tiene las siguientes columnas: airline, flt_no, fairport, tairport, depart, arrive, fare
Las columnas fairport
y tairport
son los de y a códigos de aeropuertos.
Las columnas depart
y arrive
son las fechas de salida y llegada.
Se me ocurrió una consulta que primero une los vuelos en la fairport
columna y la airports.code
columna. Para que coincida tairport
, tengo que realizar otra unión en las coincidencias anteriores desde la primera unión.
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 = '?')
Mi consulta devuelve los resultados adecuados y será suficiente para la tarea, pero me pregunto si puedo JOIN
en varias columnas. ¿Cómo construiría la WHERE
cláusula para que coincida con la ciudad / código de salida y de destino?
A continuación se muestra una "pseudoconsulta" sobre lo que quiero lograr, pero no puedo obtener la sintaxis correctamente y no sé cómo representar la airports
tabla para las salidas y los 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')
Actualizar
¡También encontré que esta representación visual de las instrucciones SQL Join es muy útil como guía general sobre cómo construir instrucciones SQL!
Respuestas:
Puede UNIRSE a la misma tabla más de una vez dando un alias a las tablas unidas , como en el siguiente ejemplo:
Tenga en cuenta que
to_port
yfrom_port
son alias para la primera y segunda copia de laairports
tabla.fuente
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
Por favor sugiéralo.algo como....
fuente
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairport
¿hace alguna diferencia? ¿Qué piensas?si mysql está bien para ti:
editar: ejemplo agregado para filtrar la salida por código o ciudad
fuente
¿Puedes usar y en la cláusula on?
Por ejemplo, algo como:
fuente
Si desea buscar en los aeropuertos FROM y TO, querrá unirse a la tabla de aeropuertos dos veces; luego puede usar las tablas from y to en su conjunto de resultados:
fuente