Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2014, 14:00   #1
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию Проблема при создании запроса

Имею следующий запрос:

Код:
select t_outer.code_table, t_outer.code_main_table, t_outer.name,
(select count (*) from nomenklatura_category as t_inner where t_inner.code_table <= t_outer.code_table group by CODE_MAIN_TABLE, CODE_TABLE, NAME order by CODE_MAIN_TABLE, CODE_TABLE, NAME)
from nomenklatura_category as t_outer
order by CODE_MAIN_TABLE, CODE_TABLE
При этой выборке возникает ошибка:
delphi multiple rows in singleton select

Не могу понять из-за чего возникает она. Если убрать сортировку в подзапросе, то ошибка не возникает, но строки он нумерует неправильно.
SlavaSH вне форума Ответить с цитированием
Старый 27.01.2014, 14:33   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Подзапрос в SELECT не должен возвращать множественную выборку. Ваш подзапрос как раз и возвращает её. Меняйте логику
Цитата:
Если убрать сортировку в подзапросе, то ошибка не возникает
Сомневаюсь. Вот если убрать group by, то ошибки не будет. Но и результат наверно не такой будет как ожидается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.01.2014, 14:41   #3
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Подзапрос в SELECT не должен возвращать множественную выборку. Ваш подзапрос как раз и возвращает её. Меняйте логику
Почему подзапрос возвращает множественную выборку, разве функция count может возвращать несколько значений?

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сомневаюсь. Вот если убрать group by, то ошибки не будет. Но и результат наверно не такой будет как ожидается
Без group by возникает ошибка:
Код:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
SlavaSH вне форума Ответить с цитированием
Старый 27.01.2014, 14:50   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Почему подзапрос возвращает множественную выборку, разве функция count может возвращать несколько значений?
Почему нет? По каждой группе указанной в group by
Цитата:
Без group by возникает ошибка
А какая СУБД и на словах объяснение что получить хочется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.01.2014, 14:53   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

зачем вообще в подзапросе групировки и сортировки если вы хотите вернуть 1 значение? что в нем еще сортировать и группировать?
eval вне форума Ответить с цитированием
Старый 27.01.2014, 15:17   #6
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А какая СУБД и на словах объяснение что получить хочется
База FireBird. Да дерево пытаюсь построить.

Цитата:
Сообщение от eval Посмотреть сообщение
зачем вообще в подзапросе групировки и сортировки если вы хотите вернуть 1 значение? что в нем еще сортировать и группировать?
Да я хз почему без сортировки он выдает неправильную структуру.

Вот что получается при запросе:
Код:
select t_outer.code_table, t_outer.code_main_table, t_outer.name,
(select count (*) from nomenklatura_category as t_inner where t_inner.code_table <= t_outer.code_table )
from nomenklatura_category as t_outer
order by CODE_MAIN_TABLE, CODE_TABLE
Там где COUNT=11, 12 должно быть 7,8 а далее 9,10,11,12
Изображения
Тип файла: jpg File1.jpg (22.0 Кб, 139 просмотров)

Последний раз редактировалось Stilet; 28.01.2014 в 09:04.
SlavaSH вне форума Ответить с цитированием
Старый 27.01.2014, 16:13   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,022
По умолчанию

а что показывает каунт?
eval вне форума Ответить с цитированием
Старый 27.01.2014, 16:26   #8
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 516
По умолчанию

как я понимаю проблема заключается в том что сортировка идет по одному полю (CODE_MAIN_TABLE), а выборка подзапроса фильтруется по другому(CODE_TABLE), от сюда и нестыковка
Пишу на Delphi за еду

Последний раз редактировалось Toxa; 27.01.2014 в 16:30.
Toxa вне форума Ответить с цитированием
Старый 27.01.2014, 16:55   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что задали, то и показывает.
Цитата:
Да дерево пытаюсь построить
Это не объяснение. Покажите 10-15 исходных записей и что из них должно по вашему разумению получиться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.01.2014, 08:27   #10
SlavaSH
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 174
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
а что показывает каунт?
да порядковый номер строки при заданной сортировке
SlavaSH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при создании аякс запроса Glowworm JavaScript, Ajax 0 31.05.2013 19:59
Проблема при создании функций. пАк777 JavaScript, Ajax 3 13.03.2012 15:50
Ошибка при создании SQL запроса ProgDel БД в Delphi 1 06.11.2010 22:05
Проблема при создании компонента Levsha100 Компоненты Delphi 3 02.05.2009 12:05
Проблема при создании БД HAMMAN БД в Delphi 4 25.04.2008 08:44