2013-04-28 97 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