Как вернуть отдельные строки при использовании соединения? - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть следующий запрос, который возвращает 1738 строк:

select a.street, b.id 
from TableA a
left join TableB b on a.city = b.city
order by a.street

При выполнении следующего запроса возвращается 1073 строки:
select distinct street from TableA

Как вернуть отдельные строки вмой первый запрос?
Я пытался использовать select distinct a.street, b.id, но это возвращает 1090 строк.

Нужно ли мне еще одно соединение?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011
select a.street, b.id 
from TableA a
left join TableB b on a.city = b.city
group by a.street, b.id
order by a.street
0 голосов
/ 22 ноября 2011

Вы должны использовать GROUP BY только с агрегатной функцией. MySQL не помечает это как ошибку, но при этом вы потеряете некоторые данные.

Что касается вашего запроса: если у вас есть 1073 разных улицы и вы получаете 1090 строк при выполнении «отдельного a.street, b.id», это означает, что для некоторых улиц существует более одного b.id. Вы можете получить все из них (и получить 1090 строк) или взять только некоторые из них. Чтобы получить 1073 строки и только один b.id для каждой улицы, используйте:

select a.street, max(b.id)
from TableA a
left join TableB b on a.city = b.city
group by a.street
order by a.street
...