Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

mysql group [D7, MySQL]


Jungle Forever! ©   (2005-06-27 21:26:00) 

совершенно дурацкая проблема: delphi ругаеться на такой запрос:
select reglist.*, count(reglist.cl_id) as cnt from reglist inner join adressbook on adressbook.id=reglist.cl_id where reglist.d_vis>1000 group by adressbook.phone

говорит "Unknow table 'adressbok' in group statement"
(эта таблица есть, все поля учавствующие в запросе существуют)
если убрать where, то запрос выполняется.

этот запрос не работает только в delphi. шэл мускула его переваривает правильно. В чем может быть дело? работаю через DBExpress, версия mysql 3.23


evvcom   (2005-06-28 15:23:00) [1]

1. Нафига group by adressbook.<поле>, если в select вообще нет ничего из adressbook? (Правильно пишется a ddress)
2. Судя по всему adressbook - это справочник адресов. reglist.cl_id - ссылается на adressbook (многие к одному). Тогда нафига джойнить к запросу adressbook, если в select опять ничего не вытаскивается из adressbook?


Anatoly Podgoretsky   (2005-06-28 09:54:00) [2]

Использовать звездочки вообще то является служебным преступлением.


ЮЮ   (2005-06-28 09:51:00) [3]

На MS SQL вешать всех мертвецов не надо. В этом случае получаем:

Server: Msg 8120, Level 16, State 1, Line 1
Column <имя таблицы>.<имя поля> is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

И так по всем полям, скрывшимися за звёздочкой


sniknik   (2005-06-28 08:24:00) [4]

> А правильно, когда в select указаны те поля, что и в group by
необязательно, аксесс и mssql во всяком случае легко без этого указания обходятся. другое дело както бессмысленно агрегаты получать и без указания по чему.

ошибка у него скорее всего изза *, т.к. чего точно нельзя так это "левых" полей которые и не в групировке и не в агрегатных функциях.
возможно(х.з. что там за синтаксис у mysql превилен) убрать его и зарабатает (вернее синтаксис будет правилен но результат... непонятен).
так
select count(r.cl_id) as cnt from reglist r inner join adressbook a on a.id=r.cl_id where r.d_vis>1000 group by a.phone


ЮЮ   (2005-06-28 04:12:00) [5]

>шэл мускула его переваривает правильно

Заменяет на правильный, наверное :)
А правильно, когда в select указаны те поля, что и в group by + агрегатные функции по любым полям:

select adressbook.phone, count(reglist.cl_id)
...
group by adressbook.phone


Наверх

Титульная страница Поиск, карта сайта Написать письмо