Вложенные запросы и ЛТ

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Вложенные запросы и ЛТ

Сообщение Hershy »

Если поставить ограничение на вложенный запрос, результат сильно отличается от запроса без ограничения.
Т.е. например

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

select
 KATSTROY.NAME(FIELDTITLE='Объект',LENGTH=25)
,CO.UNT
from
 KATSTROY
,DOCSCHEM
,(select COUNT(*) (fieldname = UNT) from DOCSCHEM D1 where ((KATSTROY.NREC == D1.CDOC AND 454 == D1.TIDKGAL))) CO
WHERE
((
        KATSTROY.NREC == DOCSCHEM.CDOC
        AND
        454 == DOCSCHEM.TIDKGAL
));
вернет правильные данные, а вот запрос

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

select
 KATSTROY.NAME(FIELDTITLE='Объект',LENGTH=25)
,CO.UNT
from
 KATSTROY
,DOCSCHEM
,(select COUNT(*) (fieldname = UNT) from DOCSCHEM D1 where ((KATSTROY.NREC == D1.CDOC AND 454 == D1.TIDKGAL))) CO
WHERE
((
        KATSTROY.NREC == DOCSCHEM.CDOC
        AND
        454 == DOCSCHEM.TIDKGAL
))
AND
CO.UNT > LONGINT(1)
;
вообще ничего не выведет

Где тут собака порылась???
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

А как иначе? Ограничения и нужны для того, что бы уменьшать количество возвращаемых данных...
vadim
топ-софт
Сообщения: 197
Зарегистрирован: Чт, 06/09/2007 17:38
Имя Фамилия: Вадим Володько
Откуда: ТопСофт
Контактная информация:

Сообщение vadim »

Николай, а сколько записей выдает первый запрос? Где его выполняете, я так понимаю - в sql?
Hershy
рег.отделение
Сообщения: 64
Зарегистрирован: Вт, 03/03/2009 07:53
Имя Фамилия: Николай Воронцов
Откуда: Галактика-Урал
Контактная информация:

Сообщение Hershy »

Да, конечно, выполняю в Саппорте

Значит следующая ситуация:
1. На каждый объект строительства (KATSTROY) есть запись в таблице DOCSCHEM (это кажется схема связи документов с об.стр. код 454)
2. В базе случилась коллизия :) и вместо одной записи DOSCHEM сейчас в базе до 200 таких схем
3. В результате при привязке договора, например, к такому об.стр. создается количество связей, равное количеству DOCSCHEM к этому объекту

Первый запрос выводит все объекты строительства, и для наглядности количество схем на каждый из них, т.е.

1Об.стр. | 1
2Об.стр. | 0
3Об.стр. | 154
и т.д.

Как только я ставлю ограничение

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

AND 
CO.UNT > LONGINT(1) 
запрос выдает 0 строк, хотя, как мне кажется, должен был выдать одну запись (см.пример).

Ну и это наблюдал не только с об.стр., а вообще во всех запросах, где использовал COUNT(*).

Тут еще хотелось бы отметить (не связано с об.стр.), что из вложенных запросов использовал еще FIRST(...), так эта штука нормально отрабатывала, при установке ограничений на результат вложенного запроса, а вот с COUNT(*) не получается
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

наверное надо в пир писать
Ответить