Теория SQL: запрос Join совместно с count(*)

BigWindow

Новичок
Теория SQL: запрос Join совместно с count(*)

Всем привет!

У меня есть две таблицы: `Users` и `Comments` отвечающие за хранение данных о юзверях и комментариях соответсвенно. Мне необходимо построить список юзеров с данными о количестве комментариев.

Итак, кол-во комментов можно легко подсчитать запросом: SELECT count(*) FROM comments WHERE C_USER_FROM = 1
Вроде все понятно, но основная проблема в Join'e данных из двух таблиц.

Необходимо, соединить данные о юзерах и запрос о кол-ве комментов. Каким образом это сделать?
 

Gas

может по одной?
Dovg
всё таки join'ом для этого случая правильней.

BigWindow
раз знаешь большую часть ответа, напиши какая именно проблема с join'ом, кинь свой запрос.
 

BigWindow

Новичок
SELECT users.*, count(comments.C_ID) FROM users INNER JOIN comments ON comments.C_User_From = users.U_ID

Вот вариант моего запроса. Но что-то мне кажется он логически не верен :confused:
 

Gas

может по одной?
Напиши сообщение об ошибке, мы ж не бабки гадалки.
Сразу скажу что скорее нужен left join, чтоб получить пользователей у которых нет коментов.
 

BigWindow

Новичок
Автор оригинала: Gas
Напиши сообщение об ошибке, мы ж не бабки гадалки.
Сразу скажу что скорее нужен left join, чтоб получить пользователей у которых нет коментов.
Error Code : 1140
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
(0 ms taken)
 

Gas

может по одной?
Правильно ругается, count - агрегатная функция и должна использоваться с group by. Добавь в конец GROUP BY users.U_ID
 

BigWindow

Новичок
Автор оригинала: Gas
Правильно ругается, count - агрегатная функция и должна использоваться с group by. Добавь в конец GROUP BY users.U_ID
Спасибо! Вот только из списка выпадают юзеры, у которых нет комментов.
 

BigWindow

Новичок
Автор оригинала: *****
left outer join
SELECT users.*, count(comments.C_ID) FROM users left outer join comments ON comments.C_User_From = users.U_ID WHERE (comments.C_User=8) GROUP BY users.U_ID

У юзверя "8" нет комментов и он выпадает из списка
 

Gas

может по одной?
конечно выпадет, зачем ставить WHERE (comments.C_User=8) ?
 

Фанат

oncle terrible
Команда форума
что здесь делает это where?
и что за левое поле в нем указано?
 

BigWindow

Новичок
Автор оригинала: Gas
конечно выпадет, зачем ставить WHERE (comments.C_User=8) ?
Ой ступил!!! Жесть! Тупанул я конкретно :)

Всем огромное спасибо! Проблема решена!

Итак, вот что в итоге у нас получилось:

Вывести совмещенные данные для одного юзера

SELECT users.*, count(comments.C_ID) FROM users
left outer join comments ON users.U_ID = comments.C_User_From
WHERE (users.U_ID=7) GROUP BY users.U_ID


Вывести совмещенные данные для всех юзеров

SELECT users.*, count(comments.C_ID) FROM users
left outer join comments ON users.U_ID = comments.C_User_From
GROUP BY users.U_ID
 
Сверху