|
Разный результат в зависимости от наличия NULL
|
|||
---|---|---|---|
#18+
Есть 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 теперь бы понять почему оно так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 10:58 |
|
Разный результат в зависимости от наличия NULL
|
|||
---|---|---|---|
#18+
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 стандарту ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 14:33 |
|
Разный результат в зависимости от наличия NULL
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 14:34 |
|
Разный результат в зависимости от наличия NULL
|
|||
---|---|---|---|
#18+
Во тут мне этот вопрос хорошо расписали https://www.sql.ru/forum/1155844/db2-neozhidanyy-rezultat-vyborki ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2019, 18:07 |
|
Разный результат в зависимости от наличия NULL
|
|||
---|---|---|---|
#18+
В выборку попадают только те строки, для которых условие фразы WHERE есть TRUE Не FALSE и не NULL (UNKNOWN) Код: sql 1. 2. 3. 4.
Такие строки попадут в выборку Код: sql 1. 2. 3. 4.
Такие строки НЕ попадут в выборку ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 02:05 |
|
|
start [/forum/topic.php?fid=53&msg=39889125&tid=1994941]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 137ms |
0 / 0 |