Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разный результат в зависимости от наличия NULL / 5 сообщений из 5, страница 1 из 1
14.11.2019, 10:58
    #39888947
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный результат в зависимости от наличия NULL
Есть 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
14.11.2019, 14:33
    #39889124
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный результат в зависимости от наличия NULL
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
14.11.2019, 14:34
    #39889125
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный результат в зависимости от наличия NULL
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
14.11.2019, 18:07
    #39889233
Guzya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный результат в зависимости от наличия NULL
Во тут мне этот вопрос хорошо расписали

https://www.sql.ru/forum/1155844/db2-neozhidanyy-rezultat-vyborki
...
Рейтинг: 0 / 0
15.11.2019, 02:05
    #39889338
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разный результат в зависимости от наличия NULL
В выборку попадают только те строки, для которых условие фразы 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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разный результат в зависимости от наличия NULL / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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