«где не в» - причудливый возврат в простейший запрос - PullRequest
0 голосов
/ 23 января 2019

Я бью стену, как это интерпретировать:

select * from (
  select '123' id1 from dual
) src
where src.id1 not in (select id1 from table1)
;

Не дает мне строк

select * from (
  select '123' id1 from dual
) src
where src.id1 in (select id1 from table1)
;

Также не дает мне строк.

Как этоэто возможно в обоих случаях?

Где не существует, с другой стороны, работает как задумано.Таблица1 не пуста.И на самом деле, да - table1 имеет как нулевые, так и ненулевые значения.Почему это делает противоположные условия оба неправильными?

РЕДАКТИРОВАТЬ: не полный дубликат, поскольку перечисленный аналогичный вопрос был, почему результаты отличаются, а здесь - почему результаты одинаковы при противоположном условии- что может сбивать с толку.

1 Ответ

0 голосов
/ 23 января 2019

Похоже, ваш список идентификаторов для проверки содержит NULL значений.

Сравнение с NULL всегда возвращает false . Даже WHERE NULL = NULL ложно (так же, как WHERE NULL != NULL). Вам нужно будет использовать IS NULL.

В вашем случае, вы, вероятно, хотите select id1 from table1 where id1 is not null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...