我正在做一个家庭作业项目,我应该执行一个数据库查询,按城市名称或机场代码查找航班,但flights
表只包含机场代码,因此如果我想按城市搜索,我必须加入airports
表。
Airports表具有以下列:code, city
FLIGHTS表具有以下列:airline, flt_no, fairport, tairport, depart, arrive, fare
列fairport
和tairport
是从和向机场代码。
列depart
和arrive
是离开和到达的日期。
我提出了一个查询,该查询首先连接fairport
列和airports.code
列上的航班。为了匹配tairport
,我必须对第一个连接中的先前匹配执行另一个连接。
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 = '?')
我的查询返回了正确的结果,这足以满足家庭作业的目的,但我想知道我是否可以在多个列上JOIN
?如何构造WHERE
子句,使其与出发地和目的地城市/代码相匹配?
下面是我想要获得的“伪查询”,但我无法获得正确的语法,并且我不知道如何表示出发和目的地的airports
表:
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')
我还发现SQL JOIN语句的以下直观表示形式非常作为如何构造SQL语句的通用指南很有帮助。