запрос c count и join

Модераторы: kdv, CyberMax

Ответить
karabas
Сообщения: 4
Зарегистрирован: 02 дек 2010, 13:30

запрос c count и join

Сообщение karabas » 02 дек 2010, 14:23

Помогите составить запрос. Есть две таблицы. 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 подразумевает именно это. Если у кого есть соображения что я не так сделал, напишите плз.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

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

Сообщение Dimitry Sibiryakov » 02 дек 2010, 14:47

Ты забыл перечислить её поля после слова SELECT.

karabas
Сообщения: 4
Зарегистрирован: 02 дек 2010, 13:30

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

Сообщение karabas » 02 дек 2010, 14:56

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

karabas
Сообщения: 4
Зарегистрирован: 02 дек 2010, 13:30

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

Сообщение karabas » 02 дек 2010, 15:02

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

karabas
Сообщения: 4
Зарегистрирован: 02 дек 2010, 13:30

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

Сообщение karabas » 02 дек 2010, 15:17

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

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

Ответить