unir tablas tabla relacionadas misma inner horizontalmente hacer diferentes consultas consultar consulta como sql database

tablas - unir dos consultas sql misma tabla



Cómo hacer una UNIÓN INTERNA en múltiples columnas (5)

¿Puedes usar y en la cláusula on?

Por ejemplo, algo como:

SELECT airline, flt_no, fairport, tairport, depart, arrive, fare FROM flights INNER JOIN airports from_port ON (from_port.code = flights.fairport) and (to_port.code = flights.tairport)

Estoy trabajando en un proyecto de tarea y se supone que debo realizar una consulta de base de datos que encuentre vuelos por el nombre de la ciudad o el código del aeropuerto, pero la tabla de flights solo contiene los códigos del aeropuerto, así que si quiero buscar por ciudad tengo para unirse a la tabla de airports .

La tabla de aeropuertos tiene las siguientes columnas: code, city
La tabla de vuelos tiene las siguientes columnas: airline, flt_no, fairport, tairport, depart, arrive, fare
El fairport y el tairport columnas son los códigos desde y hacia el aeropuerto.
Las columnas depart y arrive son fechas de salida y llegada.

Se me ocurrió una consulta que primero se une a los vuelos en la columna de fairport y en la columna de airports.code . Para poder hacer coincidir el tairport , tengo que realizar otra unión en las partidas anteriores de 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 arroja los resultados correctos y será suficiente para los fines de la tarea, pero me pregunto si puedo JOIN a varias columnas. ¿Cómo construiría la cláusula WHERE para que coincida con la salida y la ciudad / código de destino?

Debajo hay una "pseudo-consulta" sobre lo que quiero lograr, pero no puedo obtener la sintaxis correctamente y no sé cómo representar la tabla de airports 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é esta representación visual de instrucciones SQL Join para ser muy útil como una guía general sobre cómo construir sentencias SQL!


Puede UNIRSE a la misma tabla más de una vez asignando un alias a las tablas unidas, como en el siguiente ejemplo:

SELECT airline, flt_no, fairport, tairport, depart, arrive, fare FROM flights INNER JOIN airports from_port ON (from_port.code = flights.fairport) INNER JOIN airports to_port ON (to_port.code = flights.tairport) WHERE from_port.code = ''?'' OR to_port.code = ''?'' OR airports.city=''?''

Tenga en cuenta que to_port y from_port son alias para la primera y segunda copia de la tabla de airports .


Si desea buscar en los aeropuertos FROM y TO, querrá unirse a la tabla Airports dos veces; a continuación, puede usar las tablas from y to en su conjunto de resultados:

SELECT Flights.*,fromAirports.*,toAirports.* FROM Flights INNER JOIN Airports fromAirports on Flights.fairport = fromAirports.code INNER JOIN Airports toAirports on Flights.tairport = toAirports.code WHERE ...


algo como....

SELECT f.* ,a1.city as from ,a2.city as to FROM flights f INNER JOIN airports a1 ON f.fairport = a1. code INNER JOIN airports a2 ON f.tairport = a2. code


si mysql está bien para ti:

SELECT flights.*, fromairports.city as fromCity, toairports.city as toCity FROM flights LEFT JOIN (airports as fromairports, airports as toairports) ON (fromairports.code=flights.fairport AND toairports.code=flights.tairport ) WHERE flights.fairport = ''?'' OR fromairports.city = ''?''

editar: ejemplo agregado para filtrar la salida de código o ciudad