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

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

Ответить
Guardian
Сообщения: 35
Зарегистрирован: 07 авг 2008, 12:05

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

Сообщение Guardian » 14 ноя 2008, 18:46

Firebird 1,5 Windows XP Pro
Выполняю следующий запрос:
SELECT * FROM GROUPMAP G WHERE
NOT(G.VHOD IN (SELECT KODGROUPMAP FROM GROUPMAP) OR (G.KODGROUPMAP = 1))
Сервер возвращяет 2 записи.

Выполняю такой запрос:
DELETE FROM GROUPMAPG WHERE
NOT(G.VHOD IN (SELECT KODGROUPMAP FROM GROUPMAP) OR (G.KODGROUPMAP = 1))
Сервер удаляет 3 записи !!!
Вопрос заключается в том почему так происходит ведь условия для выборки и удаления одинаковое :?:

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Различный результат при одном условии

Сообщение WildSery » 14 ноя 2008, 19:51

Подзапрос выполняется для каждой записи. Читай тут.

Guardian
Сообщения: 35
Зарегистрирован: 07 авг 2008, 12:05

Re: Различный результат при одном условии

Сообщение Guardian » 17 ноя 2008, 08:41

WildSery писал(а):Подзапрос выполняется для каждой записи. Читай тут.
Я так в принципе и понял. Всеравно спасибо за ответ. Тема можно закрывать.
P.S. А в версиях 2.0,2.1 Это устранено и сначала выполняется выборка а после удаление выбранных записей или все пок остается также ?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: Различный результат при одном условии

Сообщение WildSery » 17 ноя 2008, 10:55

Нет, в 2.х всё работает так же, подзапрос выполняется на каждую строку.
Оно, конечно, планируется со временем поправить, но, если знать о такой особенности, то она никак не мешает. А иногда даже можно использовать.

Ответить