MySQL将两行合并为一行?

MySQL将两行合并为一行?,mysql,join,Mysql,Join,如何进行一个查询,从一行中选择大部分数据,但从另一行连接一列 “航班时刻表”中有一个表格: 另一个表“机场”包括: 我的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_numb

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

“航班时刻表”中有一个表格:

另一个表“机场”包括:

我的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
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
我知道这会让我每次飞行2行,就像这样:

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
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;
选择apdep.Airport\u代码作为dep\u代码,选择aparr.Airport\u代码作为arr\u代码,fs*
从航班时刻表加入
aiports apdef
关于fs.Dep_City=apdef.City join
阿帕尔机场
关于fs.Arr_City=aparr.City
副城市

这确保了这对按字母顺序排列。因此,输出中将只有一对。

再次感谢Gordon。我尝试了编辑,但它没有真正改变太多,所以我尝试了这个,并得到了我想要的

SELECT DISTINCT fs.id, 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;

如果您在选择多个相同的行时遇到问题,则可以使用“distinct”语句谢谢Gordon。这太棒了(我现在在每条记录中都有正确的dep和arr代码),但我每个航班仍然有两个结果(一个是起飞比赛,另一个是到达比赛,我想)。有没有办法只用一行就可以做到这一点,也许在比赛结束后每隔一行选择一行?我想我可以用PHP做每一行的事情。