You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SQL两次关联Locations表查询航班起降地点信息?

搞定特定出发地到目的地的航班SQL查询

嘿,其实INNER JOIN完全可以解决你的问题,大概率是你没注意到要两次关联Locations表,而且得用别名区分开出发地和目的地的数据源~

你看,Flights里的ID_Source和ID_Destination都关联Locations的ID,所以查询的时候得把Locations表调用两次,分别给个不一样的别名(比如source_loc代表出发地,dest_loc代表目的地),不然数据库根本不知道你要关联哪条数据。

给你写个完整的示例SQL:

SELECT 
    f.ID AS flight_id,
    CONCAT(source_loc.Name, ' ', source_loc.Country) AS departure,
    CONCAT(dest_loc.Name, ' ', dest_loc.Country) AS destination
FROM Flights f
INNER JOIN Locations source_loc 
    ON f.ID_Source = source_loc.ID
INNER JOIN Locations dest_loc 
    ON f.ID_Destination = dest_loc.ID
-- 这里加你的筛选条件,比如查从Naples到London的航班
WHERE source_loc.Name = 'Naples' 
  AND dest_loc.Name = 'London';

代码解释:

  • 给Flights起别名f,Locations分别起source_loc(出发地)和dest_loc(目的地),让SQL逻辑更清晰;
  • 用CONCAT(不同数据库可能写法有差异:SQL Server用+,Oracle用||)把城市和国家拼接成你想要的格式;
  • WHERE子句里直接筛选出发地和目的地的名称,就能拿到你要的特定航线航班。

如果想要输出成你示例里的那种带序号的格式,比如1st flight: Naples Italy | London England,可以用数据库的行号函数,比如MySQL的ROW_NUMBER():

SELECT 
    CONCAT(
        ROW_NUMBER() OVER (ORDER BY f.ID), 
        'st flight: ',
        source_loc.Name, ' ', source_loc.Country,
        ' | ',
        dest_loc.Name, ' ', dest_loc.Country
    ) AS flight_info
FROM Flights f
INNER JOIN Locations source_loc 
    ON f.ID_Source = source_loc.ID
INNER JOIN Locations dest_loc 
    ON f.ID_Destination = dest_loc.ID
WHERE source_loc.Name = 'Naples' 
  AND dest_loc.Name = 'London'
ORDER BY f.ID;

这样就能完美得到你想要的输出格式啦~之前用INNER JOIN失败应该就是没给Locations表加别名,导致关联冲突了,试试上面的写法肯定没问题!

内容的提问来源于stack exchange,提问作者user1238784

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:05:08