gpt4 book ai didi

sql - 如何对多列进行 INNER JOIN

转载 作者:太空狗 更新时间:2023-10-30 01:36:54 25 4
gpt4 key购买 nike

我正在做一个作业项目,我应该执行一个数据库查询,通过城市名称或机场代码查找航类,但 flights 表只包含机场代码所以如果我想按城市搜索,我必须加入 airports 表。

airports 表包含以下列:code, city
航类表包含以下列:airline, flt_no, fairport, tairport, depart, arrive, fare
fairporttairport 列是fromto 机场代码。
departarrive 列是出发和到达的日期。

我提出了一个查询,它首先在 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')

更新

我还找到了this visual representation of SQL Join statements作为有关如何构建 SQL 语句的一般指南,非常很有帮助!

最佳答案

您可以通过给连接的表一个 alias 来多次连接同一个表。 ,如以下示例所示:

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='?'

请注意,to_portfrom_portairports 表的第一个和第二个副本的别名。

关于sql - 如何对多列进行 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2366780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com