Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Ошибка в запросе  [new]
Nick00
Member

Откуда:
Сообщений: 4
Здравствуйте.
Написал такой запрос
SELECT COUNT(*) FROM
(
SELECT u.surname AS fio,
d.num AS num,
p.name AS name,
r3.num_r AS num_r
FROM doc d
LEFT JOIN users u ON doc.kod_user=users.kod_elem
LEFT JOIN pred p ON  doc.kod_pred=pred.kod_elem
LEFT JOIN rasch1 r1 ON rasch1.kod_doc=doc.kod_elem
LEFT JOIN rasch3 r3 ON rasch1.kod_elem=rasch3.kod_rasch1
WHERE d.date='12.12.2020'
ORDER BY d.num
)

При попытке выполнить выдается ошибка
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 1.
select.
Не пойму в чем проблема, ведь судя по документации InterBase поддерживает вложенные запросы. Использую InterBase 2009
15 окт 21, 09:41    [22384072]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
Nick00,

1. Это реальный запрос или для того чтобы показать проблему? Потому что производна таблица тут на фиг не сдалась
2. Если дал таблице алиас, то его и надо использовать в условии связи, а не исходное имя таблицы
3. Называть поле ключевым словом date как минимум не разумно
4. Ты путаешь подзапросы и производные таблицы (Derived Tables), последние появились только в Interbase 2017

Если прям без Derived Tables вы прожить не можете, то либо обновляйте IB за денюжку, либо переходите на Firebird
15 окт 21, 09:56    [22384081]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Nick00
Member

Откуда:
Сообщений: 4
Запрос привел для демонстрации проблемы. Не подскажешь как можно посчитать число записей в подобном запросе с выборкой нескольких полей в моей версии InterBase?
15 окт 21, 10:03    [22384084]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
Nick00,

даже там где Derived Tables есть, твой запрос не делает, то что ты хочешь. Отдельно считай COUNT, отдельно выбирай набор записей. По другому никак. Всяких там оконных функций, которые могу это в IB тоже нет
15 окт 21, 10:09    [22384086]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Nick00
Member

Откуда:
Сообщений: 4
Симонов Денис, Так я же хочу узнать число записей в результате выполнения запроса на выборку. Как я отдельно могу от него посчитать COUNT?
15 окт 21, 10:17    [22384087]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1460
Nick00
Так я же хочу узнать число записей в результате выполнения запроса на выборку. Как я отдельно могу от него посчитать COUNT?

А чем не устраивает
SELECT COUNT(*)
FROM doc d
LEFT JOIN users u ON doc.kod_user=users.kod_elem
LEFT JOIN pred p ON  doc.kod_pred=pred.kod_elem
LEFT JOIN rasch1 r1 ON rasch1.kod_doc=doc.kod_elem
LEFT JOIN rasch3 r3 ON rasch1.kod_elem=rasch3.kod_rasch1
WHERE d.date='12.12.2020'

Или я чего-то не вижу?
15 окт 21, 10:35    [22384097]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
Nick00,

1. выполнить в той же SNAPSHOT транзакции подобный запрос, только вместо списка полей написать COUNT(*)
2. Запихать оба запроса внутрь ХП и сделать выборку из неё
3. На клиенте сделать FetchAll и посчитать количество отфетченных записей
4. Перейти на Firebird 3.0 или лучше 4.0 и использовать COUNT(*) OVER()

можно и ещё варианты придумать
15 окт 21, 10:38    [22384100]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Nick00
Member

Откуда:
Сообщений: 4
m7m, спасибо
15 окт 21, 10:39    [22384101]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 11092
m7m,

а ему надо одновременно значения полей получить и количество записей которые вернул запрос
15 окт 21, 10:40    [22384102]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8877
>Как я отдельно могу от него посчитать COUNT?
Если транзация не снапшот, то отдельный каунт может и погоду на марсе показать.

Сфетчить все записи и подсчитать сколько сфетчилось?
15 окт 21, 10:43    [22384104]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
m7m
Member

Откуда: Украина, Мариуполь
Сообщений: 1460
Симонов Денис
m7m,

а ему надо одновременно значения полей получить и количество записей которые вернул запрос

Ну мой хрустальный шар на столько не работает
15 окт 21, 11:03    [22384111]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить