Postgres NOT IN (null) не дает результата
Я использую Postgres с этим запросом
select
*
from Entity this_
where
(this_.ID not in (null))
почему это не дает мне никаких результатов? Я ожидал бы получить все строки, где id не равен null
С
(this_.ID not in (1))
Я получаю ожидаемые результаты
3 ответов
результат [not] in (null)
всегда будет null. Для сравнения с null вам нужно is [not] null
или is [not] distinct from null
select *
from Entity this_
where this_.ID is not null
если вы хотите where (ID not in (1,null))
как в вашем комментарии Вы можете сделать
where ID is not null and ID not in (1)
PostgreSQL использует NULL как неопределенное значение.
Вы просите вернуть элементы, которые не находятся в списке или неопределенном значении. Поскольку undefined означает, что вы не знаете, что внутри, PostgreSQL не возвращает какой-либо элемент, потому что просто не может ответить на запрос.
Пока запрос:
select * from Entity where id in (1, null)
может возвращать записи, потому что если он находит элемент с ID = 1 знает, что находится в коллекции
просьба:
select * from Entity where (ID not in (1, null))
не может будьте удовлетворены, потому что значение null может быть любым значением.
select *
from Entity this_
where (this_.ID not in (null))
" IN " или "NOT IN" не выбирайте значения NULL Вы можете написать
select *
from Entity this_
where (this_.ID not in (1))
и ваш выбор не будет содержать нулевых значений