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いらない。distinctselect

あなたが抱えている問題は、航空会社が特定の都市への複数のルートを持っている可能性があることです. これにより、都市が重複します。デフォルトで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 に答える