JOIN将两行合并为一

JOIN将两行合并为一

如何进行查询以从1行中选择大部分数据,但从另一行中连接一列呢?

一个表“ flight_schedules”具有:

Flight | Dep_City | Arr_ City | Dep_Time | Arr_Time
---------------------------------------------------
901    | Chicago  | Miami     | 0600     | 0900
902    | Miami    | Chicago   | 0945     | 1300


另一个表“机场”具有:

City     | Airport_Code
-----------------------
Chicago  | KORD
Miami    | KMIA


我的查询atm是这样的:

SELECT ap.Airport_Code as dep_code, ap.Airport_Code as arr_code, fs.* FROM flight_schedules fs JOIN aiports ap ON (fs.Dep_City=ap.City OR fs.Arr_City=ap.City) ORDER BY flight_number


我知道每次飞行都会给我2行,如下所示:

arr_code | dep_code | Flight | Dep_City | Arr_ City | Dep_Time | Arr_Time
-------------------------------------------------------------------------
KORD     | KORD     | 901    | Chicago  | Miami     | 0600     | 0900
KMIA     | KMIA     | 901    | Chicago  | Miami     | 0600     | 0900
KMIA     | KMIA     | 902    | Miami    | Chicago   | 0945     | 1300
KORD     | KORD     | 902    | Miami    | Chicago   | 0945     | 1300


我真正要的是:

arr_code | dep_code | Flight | Dep_City | Arr_ City | Dep_Time | Arr_Time
-------------------------------------------------------------------------
KORD     | KMIA     | 901    | Chicago  | Miami     | 0600     | 0900
KMIA     | KORD     | 902    | Miami    | Chicago   | 0945     | 1300


有没有一种方法可以调整我的查询来实现这一目标,或者我注定要在flight_schedules表中包含机场代码(这需要一些脚本)?还是...在flight_schedules表中(约3000个)为每个航班命中数据库?虽然我可以做到,但是查询解决方案会更优雅,使用更少的资源。

在此先感谢您的帮助。

最佳答案

您想两次加入表格以分别获取到达城市和离开城市的代码:

SELECT apdep.Airport_Code as dep_code, aparr.Airport_Code as arr_code, fs.*
FROM flight_schedules fs JOIN
     aiports apdef
     ON fs.Dep_City = apdef.City join
     airports aparr
     on fs.Arr_City = aparr.City
ORDER BY flight_number;


编辑:

如果您希望每个航班查找一行,则添加一个where子句:

SELECT apdep.Airport_Code as dep_code, aparr.Airport_Code as arr_code, fs.*
FROM flight_schedules fs JOIN
     aiports apdef
     ON fs.Dep_City = apdef.City join
     airports aparr
     on fs.Arr_City = aparr.City
WHERE dep_city < arr_city
ORDER BY flight_number;


这样可以确保该对按字母顺序排列。 。 。因此输出中只有一对。

关于mysql - MySQL JOIN将两行合并为一?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18007394/

10-10 07:30