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 flightstabla solo contiene los códigos del aeropuerto, así que si quiero buscar por ciudad, tengo que únete en la airportsmesa.
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 fairporty tairportson los de y a códigos de aeropuertos.
Las columnas departy arriveson las fechas de salida y llegada.
Se me ocurrió una consulta que primero une los vuelos en la fairportcolumna y la airports.codecolumna. 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 JOINen varias columnas. ¿Cómo construiría la WHEREclá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 airportstabla 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_portyfrom_portson alias para la primera y segunda copia de laairportstabla.fuente
flights f INNER JOIN airports a ON a.code = f.fairport OR a.code = f.tairportPor 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