Re: Sub-query having NULL row returning FALSE result
От | Tom Lane |
---|---|
Тема | Re: Sub-query having NULL row returning FALSE result |
Дата | |
Msg-id | 25435.1467181683@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Sub-query having NULL row returning FALSE result (Sridhar N Bamandlapally <sridhar.bn1@gmail.com>) |
Ответы |
Re: Sub-query having NULL row returning FALSE result
|
Список | pgsql-general |
Sridhar N Bamandlapally <sridhar.bn1@gmail.com> writes: > postgres=# CREATE TABLE emp (id INTEGER unique, ename VARCHAR); > postgres=# INSERT INTO emp VALUES (null, 'aaa'); > ... > postgres=# INSERT INTO emp SELECT * FROM (SELECT 5::integer id, > 'eee'::varchar ename) nr WHERE id NOT IN (SELECT id FROM emp); > INSERT 0 0 This is expected. NOT IN can never succeed if there are any nulls returned by the sub-select, because the nulls represent "unknown", and so it's unknown whether there is a match to the outer "id" value, and WHERE takes a null (unknown) result as false not true. Certainly there are things to quibble with in that behavior, but it's what's been required by the SQL standard since 1992. > but this is working with other databases Really? None that are compliant with the SQL standard, for sure. regards, tom lane
В списке pgsql-general по дате отправления: