подзапрос

Запросы, планы, оптимизация запросов, ...

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

Ответить
Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

подзапрос

Сообщение Karp » 02 сен 2005, 12:42

не пробовал раньше подзапросы в секции select ... from ...
вроде бы с FB 1.5 можно (читал RN)
так вот, запрос следующего вида:

select r_.r_user,
(select count(r_1.item) from table_item r_1 where (r_1.date_ in between :d1 and :d2) and (r_1.r_user=r_.r_user))
from table_item
where (r_.date_ in between :d1 and :d2) and (r_take=:id_take)

в YA-887 проходит и выдаёт правильные результаты, в FB 1.5.2 и FB 2.0 3alpha вообще не катит (ошибку с № ХХХХ выдаёт)

я понимаю, что в подзапросе используется в качестве аргумента значение из основного запроса

Это фича YA? отмечу, что в боевой БД я это не использую, и в ХП этот запрос даёт в YA неправильные результаты (почему-то count(r_1.item) не обнуляется

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 13:03

а слабо точный запрос привести, а не обрубок?
какая дословно ошибка выдается?

по сути идентичный запрос:

Код: Выделить всё

select rdb$relation_name,
(select count(*) from rdb$relation_fields r_1 where r_1.rdb$relation_name=r_.rdb$relation_name)
from rdb$relations r_
у меня работает на всех версиях

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 13:25

dimitr писал(а):а слабо точный запрос привести, а не обрубок?
какая дословно ошибка выдается?
не слабо, в понедельнтк токо (патамуч-то не хочу врать -))
могу и срез БД кинуть
там ещё join-ы есть
но суть в том, что YA в подзапросе понимает значение параметра (который является возвращаемым значением запроса в основной части)
я реализовал это через ХП, но ведь странно, что в YA этот запрос прходит, а в FB нет...
щшибка ISC{{{{{{ не помню число, но одинаковое в FB...

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 13:31

кстати, раз уж ты отвлёкся на меня...
нет ведь функции LIST в FB-2-A3, а вот рестор метаданных проходит..
полный рестор обрубается...

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 02 сен 2005, 15:18

Karp писал(а): могу и срез БД кинуть
там ещё join-ы есть
щаз окажется, что там еще и агрегаты есть...
Karp писал(а):но суть в том, что YA в подзапросе понимает значение параметра (который является возвращаемым значением запроса в основной части)
я тебе привел пример именно такого запроса. Все работает ОК.
Karp писал(а):щшибка ISC{{{{{{ не помню число, но одинаковое в FB...
IMHO, текст было проще запомнить :-)
Karp писал(а):нет ведь функции LIST в FB-2-A3, а вот рестор метаданных проходит.. полный рестор обрубается...
щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю" (с)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 сен 2005, 15:40

параметр OldParameterOrdering в firebird.conf менять не пробовал?

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 15:43

dimitr писал(а): щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю"
Дим! я сам не верил-))) новидел своими глазами...
вот с этого момента подробнее..
в понедельник = полный текст в студию -))
а по существу? ну не проходит у меня этот зпрос -)))

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 сен 2005, 15:45

по существу - не клюй мозги, дай сообщение об ошибке.

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 15:49

по поводу альфы 3:
именно так и говорит (про метаданные) ну, что нет ошибок -))
с данными говорит :
ошибка конвертации строки "0"
хотя нет тама такой строки ваабще -)))

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 15:53

kdv писал(а):по существу - не клюй мозги, дай сообщение об ошибке.
Дам! но в понедельник, т.к. сейчас не на работе и воспроизвести по памяти не смогу...

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 02 сен 2005, 16:08

kdv писал(а):параметр OldParameterOrdering в firebird.conf менять не пробовал?
попробую -)))

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 05 сен 2005, 11:13

dimitr писал(а): щаз окажется, что там еще и агрегаты есть...
Запрос (в Ya работает):

Код: Выделить всё

  SELECT R_U.RING_USER_NAME,
         (SELECT COUNT(R_D1.RING_ITEM_ID) FROM RING_DATA R_D1
           WHERE (CAST(R_D1.RING_TIME AS DATE) BETWEEN :D1 AND :D2) AND
                 (R_D1.RING_TYPE_ID=18) AND
                 (R_D1.RING_USER_ID=R_U.RING_USER_ID)) AS NN_1,
         COUNT(R_D.RING_USER_ID)  AS NN_RES
  FROM RING_USERS R_U JOIN
       RING_DATA R_D ON (R_D.RING_USER_ID=R_U.RING_USER_ID) JOIN
       RING_ITEMS R_I ON (R_I.RING_ITEM_ID=R_D.RING_ITEM_ID) JOIN
       RING_TAKES R_T ON (R_T.RING_TAKE_ID=R_I.RING_TAKE_ID)
  WHERE (CAST(R_D.RING_TIME AS DATE) BETWEEN :D1 AND :D2) AND
        (R_T.RING_TAKE_ID=3) AND
        (R_D.RING_TYPE_ID IN (17,18,26,27,28,29))
  GROUP BY R_U.RING_USER_NAME
  ORDER BY R_U.RING_USER_NAME
Ощибка в 1.5.2:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
unknown ISC error 335544824.

Ощибка в 2.0:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

dimitr писал(а):щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю" (с)
за LIST согласен на канделявр, "соврамши" (C), я его комментировал

но полный рестор всё одно не проходит, буду разбираться, текст ошибки обязательно сообщу [/code]

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Сообщение sag » 05 сен 2005, 11:28

Karp писал(а):
dimitr писал(а): щаз окажется, что там еще и агрегаты есть...
Запрос (в Ya работает):
Ощибка в 1.5.2:
Ощибка в 2.0:
странно, на 1.5.2 ошибка так же как и на 2-ке должна быть опознана.
Добавь в group by секцию поле R_U.RING_USER_ID:

Код: Выделить всё

  GROUP BY R_U.RING_USER_NAME, R_U.RING_USER_ID
  ORDER BY R_U.RING_USER_NAME

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 05 сен 2005, 13:08

Karp писал(а):Ощибка в 1.5.2:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
unknown ISC error 335544824.
firebird.msg не соответствует версии сервера

Karp
Сообщения: 41
Зарегистрирован: 30 апр 2005, 16:30

Сообщение Karp » 05 сен 2005, 19:23

dimitr писал(а): firebird.msg не соответствует версии сервера
от 13.12.2004 01.05


при ресторе постоянно вылетает ошибка

Код: Выделить всё

gbak: restoring data for table TABLE_NAME
gbak:  ERROR: conversion error from string "0"
gbak:  ERROR: gds_$send failed
gbak: Exiting before complection due to erors 
но здесь похоже на coollate, я менял WIN_1251_RU на WIN_1251:

Код: Выделить всё

update RDB$FIELDS set
RDB$COLLATION_ID = 0
where RDB$FIELD_NAME = 'STRING_64';
commit;
может хвост какой остаётся? потому как в отресторенные метаданные тоже запись не проходит из скрипта (ФК убиты были), а вот создание таблицы из скрипта с последующей вставкой проходит на ура

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 сен 2005, 09:33

слушай, ты там, конечно, можешь переколупать сам все что угодно, но такие сообщения об ошибках слать не надо. Сам наковырял в системных таблицах, сам и разбирайся. Не надо грузить людей проблемами, которые вызваны твоими личными экспериментами.
Тем более что про изменение коллэйтов и чарсетов написано в www.ibase.ru/devinfo/ibrusfaq.htm

Ответить