SQL Join 重复结果

3

我学习了比通常更高级的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

我花了几个小时才达到这一点,所以我会感激任何建议、抨击或答案 :)

谢谢。

1个回答

3

在使用group by时,您无需在select子句中使用distinct

问题在于航空公司可能有多条路线通向某个城市。这会导致该城市出现重复项。默认情况下,group_concat()不会删除这些重复项。为了解决这个问题,在group_concat中使用distinct即可:

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;

我要去睡觉了....我以为distinct与此有关,我已经花了最近一两个小时翻阅这个网站,这是一个非常好的资源。非常感谢你,那真是太有帮助了。希望它能帮助到其他处于同样情况的人。 - Josh Dredge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接