2013-10-10 70 views
0

我有一個航班表,它有一個出發地和目的地城市,代表一個外國人的身份。此表的如何在MySQL中首次選擇一個數字顯示在多個列中?

非常簡單的例子是這樣的:

id | origin | destination 
023  1  3 
044  3  2 
332  2  1 
509  1  3 
493  1  4 

我需要在第一時間拿到,一個城市顯示爲起點或終點;包含尚未飛往或離開城市的所有航班的列表。

我想獲得上面的例子是:

023: 1, 3 
044: 2 
493: 4 

航班332和509不輸出,因爲它們只能訪問已訪問過的城市。

這是我已經試過:

(SELECT distinct(origin), distinct(destination) FROM flights ORDER BY id) 

不起作用,因爲你不能比一個不同列中選擇多個

SELECT (distinct(origin) FROM flights ORDER BY id) UNION (distinct (destination) FROM flights ORDER BY id) 

不會因爲語法錯誤的工作,但主要是因爲它沒有考慮到一個城市在原產地目的地專欄中應該是唯一的。

如果在SQL中沒有快速的方法做到這一點,我也很高興只是遍歷並跟蹤已訪問過的城市(這個應用程序實際上只有一個用戶,而他並不關心一些毫秒計算,因爲他超過了80),但我很想知道,以便我可以瞭解更多關於SQL的知識!

回答

1

該做的:

SELECT id, GROUP_CONCAT(city ORDER BY city) cities 
FROM (
    SELECT city, min(id) id 
    FROM (
     SELECT origin city, MIN(id) id 
     FROM flights 
     GROUP BY city 

     UNION 

     SELECT destination city, MIN(id) id 
     FROM flights 
     GROUP BY city) u 
    GROUP BY city) x 
GROUP BY id 

DEMO

+0

哇!這是相當的問題。這很奇怪什麼是簡單的,什麼是困難的SQL :) –

相關問題