Константин wrote:
тестовый запрос с любым in в where:
  delete from t4_string where id not in (select val_id from val)
  и иже вариации ...
не отрабатывает условие id not in (select val_id from val)
при условии что (select val_id from val) может вернуть NULL
в перемежку с нормальными целочисленными значениями ... :(

Все отрабатывает как надо :-) Просто ты с этим не согласен :-)

3) delete from t4_string t where not exists (select * from val where val_id = 
t.id);
   работает в любом случае

Сколько можно повторять миру, что:

- IN и аналогичный EXISTS равнозначны
- NOT IN неравнозначен аналогичному NOT EXISTS

И разница именно в нуллах. В стандарте это описано вполне кокретно. Всю жизнь сервер возвращал неправильный результат, если NOT IN юзал индекс и в списке значений были нуллы. Исправлено лишь в FB2.


--
Дмитрий Еманов

Ответить