我正在做一个家庭作业项目,我应该执行数据库查询,通过城市名称或机场代码查找航班,但该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 = '?')
Run Code Online (Sandbox Code Playgroud)
我的查询返回正确的结果,这足以满足作业的目的,但我想知道我是否可以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')
Run Code Online (Sandbox Code Playgroud)
我也发现了SQL的语句加入这个可视化表示是非常的了解如何构建SQL语句的一般指导帮助!
Dan*_*llo 133
通过为连接表提供别名,您可以多次使用同一个表加入,如下例所示:
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='?'
Run Code Online (Sandbox Code Playgroud)
请注意,to_port
和from_port
是airports
表的第一个和第二个副本的别名.
Pau*_*sey 24
就像是....
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
Run Code Online (Sandbox Code Playgroud)
Phi*_*off 18
如果mysql对你没问题:
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 = '?'
Run Code Online (Sandbox Code Playgroud)
编辑:添加示例以过滤代码或城市的输出
小智 14
你可以在on子句中使用吗?
例如,类似于:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
367682 次 |
最近记录: |