我正在做一个家庭作业项目,应该执行一个数据库查询,该查询可以按城市名称或机场代码查找航班,但是该flights
表仅包含机场代码,因此如果要按城市搜索,我必须参加airports
桌子。
机场表有以下几列:code, city
该航班表有以下几列: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的语句加入这个可视化表示是非常的了解如何构建SQL语句的一般指导帮助!
3
提示:您需要为每条记录查找两个城市(一个用于航站楼,另一个用于航站楼。因此(确实需要)有两个 JOIN,并且包含airports表,但是其中一个基于Fairport,另一个在飞机场上
—
mjv
提示2:因此,您还需要为Airports表添加别名,以便您知道如何区分它们(即,哪个机场表带有Fairport查找和Tairport查找)。别名的SQL关键字为AS(尽管可以省略,例如... JOIN airport [AS] FA ON FA.code = flight.tairport ...)
—
mjv 2010年