почему этот запрос левого соединения не смог загрузить все данные в левой таблице? - PullRequest
1 голос
/ 27 марта 2010

таблица пользователей

+-----+-----------+
| id  | username  |
+-----+-----------+
|   1 | tom       |
|   2 | jelly     |
|   3 | foo       |
|   4 | bar       |
+-----+-----------+

таблица групп

+----+---------+-----------------------------+
| id | user_id | title                       |
+----+---------+-----------------------------+
|  2 |       1 | title 1                     |
|  4 |       1 | title 2                     |
+----+---------+-----------------------------+

запрос

SELECT users.username,users.id,count(groups.title) as group_count 
FROM users 
LEFT JOIN groups 
ON users.id = groups.user_id

результат

+----------+----+-------------+
| username | id | group_count |
+----------+----+-------------+
| tom      |  1 |           2 |
+----------+----+-------------+

где информация об остальных пользователях? результат совпадает с внутренним соединением, разве левое соединение не должно возвращать все данные левой таблицы?

PS: я использую mysql

Ответы [ 2 ]

3 голосов
/ 27 марта 2010

Разве вам не нужна группировка по предложению?

group by users.username,users.id

не очень много знаю о mysql, но в mssql это понадобится для запуска

0 голосов
/ 27 марта 2010

Что вы ожидаете от столбца group_count, если все пользователи будут возвращены? Если для пользователей без групп вы ожидали ноль, что казалось бы естественным, как бы он достиг этого результата и вывел бы хотя бы одну строку?

...