2013-04-28 2 views
3

Я изучаю SQL на несколько более продвинутой степени, чем обычно, и я немного застрял на этом.SQL Join Duplicate Results

Запрос состоит в том, чтобы получить все аэропорты, которые авиакомпания летает в (пункты назначения) от введенного пользователем источника.

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 вы не необходимость 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; 
+0

-_- Я иду спать .... Я думал отчетливый что-то делать с ним, и я провел последний час или два щелчка через этот сайт, который является удивительным ресурсом. Спасибо, очень, очень, это было невероятно полезно. Надеюсь, это поможет кому-то еще в той же ситуации. –