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

我花了几个小时才达到这一点,所以我将不胜感激任何建议、滥用或回答:)

谢谢你。

4

1 回答 1

3

使用group by不需要distinct在子句select中。

您遇到的问题是航空公司可能有不止一条通往给定城市的路线。这会导致城市重复。默认情况下,group_concat()不会删除这些重复项。要解决此问题,您distinct需要group_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;
于 2013-04-28T19:57:48.647 回答