Страница 1 из 1

запрос c count и join

Добавлено: 02 дек 2010, 14:23
karabas
Помогите составить запрос. Есть две таблицы. users и phones.

users - id_usr (integer), fio (varchar)
phones - id_usrf (integer), tel (varchar)

Нужно вывести все записи из таблицы users и все соответствующие записи из таблицы phones с подсчетом количества. Например у пользователя Иванов id_usr = 4 и для него в таблице phones есть три записи с телефонами. Значит в результате запроса напротив фамилии Иванов должно выйти 3. Я сделал такой запрос:

select count(phone.id_usrf) as cntphone from phone
LEFT JOIN users on phone.id_usrf = users.id_usr
group by phone.id_usrf

В результате выполнения выводится только поле cntphone а приклеенная джойном таблица users вообще не отображается, хотя как я думал она должна была отобразиться вся, без жесткого соответствия id_usr=id_usrf, ведь left join подразумевает именно это. Если у кого есть соображения что я не так сделал, напишите плз.

Re: запрос c count и join

Добавлено: 02 дек 2010, 14:47
Dimitry Sibiryakov
Ты забыл перечислить её поля после слова SELECT.

Re: запрос c count и join

Добавлено: 02 дек 2010, 14:56
karabas
Ели перечислить поля из users после select, выдается ошибка:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

Re: запрос c count и join

Добавлено: 02 дек 2010, 15:02
karabas
Добавил еще после group by все поля которые перечислены в select. Запрос выполнился, но вышли только те поля для которых есть соответствие id_usr = id_usrf, а мне надо чтобы пользователи вышли все. Не могу додуматься как это сделать.

Re: запрос c count и join

Добавлено: 02 дек 2010, 15:17
karabas
karabas писал(а):Ели перечислить поля из users после select, выдается ошибка:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

Все. Разобрался. Надо было "приклеивать" джойном phones а не users. Спасибо за помощь.