2013-04-28 120 views
3

我一直在學習SQL比稍高一點的程度,我有點卡在這一個。SQL加入重複結果

查詢是從一個用戶輸入的起源中獲取航空公司飛往(目的地)的所有機場。

SELECT DISTINCT a.airline_name, GROUP_CONCAT(ap.city) AS groupedDestinations 
      FROM routes AS r 
      LEFT JOIN airlines AS a 
       ON r.airline = a.airline_iata 
      LEFT JOIN airports AS ap 
       ON r.destination = ap.airport_iata 
      WHERE r.origin = ? AND a.active="Y" AND r.codeshare != "Y" 
      GROUP BY a.airline_name ASC 

結果應該是:

Airline Name | city1, city2 

相反,它是:

Airline Name | city1, city2, city1, city2 

這是我花了幾個小時才能到這一點,所以我將不勝感激任何意見,濫用或回答:)

謝謝。

回答

3

當使用group by需要distinctselect子句。

您遇到的問題是航空公司可能有多條航線前往某個城市。這導致城市重複。默認情況下,group_concat()不會刪除這些重複項。爲了解決這個問題,你要distinctgroup_concat

SELECT a.airline_name, GROUP_CONCAT(distinct ap.city) AS groupedDestinations 
      FROM routes AS r 
      LEFT JOIN airlines AS a 
       ON r.airline = a.airline_iata 
      LEFT JOIN airports AS ap 
       ON r.destination = ap.airport_iata 
      WHERE r.origin = ? AND a.active="Y" AND r.codeshare != "Y" 
      GROUP BY a.airline_name ASC; 
+0

-_- 我要睡覺.... 我想不同有一些東西需要用它,我已經花了近一兩個小時輕彈通過這個網站,這是一個驚人的資源。 非常感謝你,非常非常有幫助。希望它能幫助處於相同情況的其他人。 – 2013-04-28 20:02:42