powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разный результат в зависимости от наличия NULL
5 сообщений из 5, страница 1 из 1
Разный результат в зависимости от наличия NULL
    #39888947
Sintetik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Netezza, но это тот же постгрес

поле ID в таблице xxxx точно не содержит значения 1421012290

select 1 where 1421012290 in (select id from xxxx)
возвращает пустую выборку, нормально

select 1 where 1421012290 not in (select id from xxxx)
возвращает 1 тоже нормально

поле hashid в таблице xxxx точно не содержит значения 'DPSVCE-SU44-UVUA2-RT231'
select 1 where 'DPSVCE-SU44-UVUA2-RT231' not in (select f2.hashid from xxxx f2)
возвращает пустую выборку, почему????

select 1 where 'DPSVCE-SU44-UVUA2-RT231' in (select f2.hashid from xxxx f2)
возвращает пустую выборку, нормально

единственная разница в полях, что нет строк с ID is null, а в hashid такие есть

запрос решил проблему
update хххх set hashid='' where hashid is null

теперь бы понять почему оно так?
...
Рейтинг: 0 / 0
Разный результат в зависимости от наличия NULL
    #39889124
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sintetik
Есть Netezza, но это тот же постгрес

поле ID в таблице xxxx точно не содержит значения 1421012290

select 1 where 1421012290 in (select id from xxxx)
возвращает пустую выборку, нормально

select 1 where 1421012290 not in (select id from xxxx)
возвращает 1 тоже нормально

поле hashid в таблице xxxx точно не содержит значения 'DPSVCE-SU44-UVUA2-RT231'
select 1 where 'DPSVCE-SU44-UVUA2-RT231' not in (select f2.hashid from xxxx f2)
возвращает пустую выборку, почему????

select 1 where 'DPSVCE-SU44-UVUA2-RT231' in (select f2.hashid from xxxx f2)
возвращает пустую выборку, нормально

единственная разница в полях, что нет строк с ID is null, а в hashid такие есть

запрос решил проблему
update хххх set hashid='' where hashid is null

теперь бы понять почему оно так?


В документации
https://www.postgresql.org/docs/12/functions-subquery.html#FUNCTIONS-SUBQUERY-NOTIN
все описано
"Note that if the left-hand expression yields null, or if there are no equal right-hand values and at least one right-hand row yields null, the result of the NOT IN construct will be null, not true. This is in accordance with SQL's normal rules for Boolean combinations of null values."
вопросы к SQL стандарту
...
Рейтинг: 0 / 0
Разный результат в зависимости от наличия NULL
    #39889125
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sintetik,

https://www.postgresql.org/docs/current/functions-subquery.html#FUNCTIONS-SUBQUERY-IN Note that if the left-hand expression yields null, or if there are no equal right-hand values and at least one right-hand row yields null, the result of the NOT IN construct will be null, not true. This is in accordance with SQL's normal rules for Boolean combinations of null values.
Если хотя бы одно значение в IN-списке есть NULL, то результат NOT IN конструкции будет NULL, а не true. В соответствии с SQL стандартом.

Ну а любой предикат возвращающий NULL отфильтровывает запись, т.к. остаются только true.
...
Рейтинг: 0 / 0
Разный результат в зависимости от наличия NULL
    #39889233
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во тут мне этот вопрос хорошо расписали

https://www.sql.ru/forum/1155844/db2-neozhidanyy-rezultat-vyborki
...
Рейтинг: 0 / 0
Разный результат в зависимости от наличия NULL
    #39889338
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В выборку попадают только те строки, для которых условие фразы WHERE есть TRUE
Не FALSE и не NULL (UNKNOWN)

Код: sql
1.
2.
3.
4.
1 NOT IN (22, 33) 
= 1 <> 22 AND 1 <> 33 
= TRUE AND TRUE 
= TRUE

Такие строки попадут в выборку

Код: sql
1.
2.
3.
4.
1 NOT IN (22, NULL) 
= 1 <> 22 AND 1 <> NULL 
= TRUE AND NULL (UNKNOWN)
= NULL (UNKNOWN)

Такие строки НЕ попадут в выборку
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разный результат в зависимости от наличия NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]