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))

и ваш выбор не будет содержать нулевых значений