Re: [HACKERS] Subselects and NOTs

Поиск
Список
Период
Сортировка
От yurikn@glas.apc.org (Yurik V. Nazaroff)
Тема Re: [HACKERS] Subselects and NOTs
Дата
Msg-id 6cnkkk$1cm$1@south-western.nazaroff.msk.ru
обсуждение исходный текст
Список pgsql-hackers
Vadim B. Mikheev <vadim@sable.krasnoyarsk.su> wrote:

>  create table a (a int, a1 char(8));
>  create table b (b int);
>  insert into a values (1, 'one');
>  insert into a values (NULL, 'null');

>  insert into b values (1);
>  insert into b values (NULL);

>  select * from a where a in (select * from b);
>  -- 1 row with a == 1 expected
>  select * from a where a not in (select * from b);
>  -- 0 row expected
>  select * from a where not a in (select * from b);
>  -- 0 row in Oracle & Informix, 1 row in Pg (with a == NULL), SyBase ???

Should be 0 row(s) expected.  Here's why: three-value logic.

a in (select...)
a == any (select...)

    (a=1) == (b==1) is 'true'
    (a=1) == (b==NULL) is 'unknown'
        'true' OR 'unknown' is 'true'.

    (a=NULL) == (b==1) is 'unknown'
    (a=NULL) == (b==NULL) is 'unknown'
        'unknown' OR 'unknown' is 'unknown'
        not ('unknown') is 'unknown'
        shouldn't be in 'where not a in...' query

Hope this helps.

--
Yurik


В списке pgsql-hackers по дате отправления:

Предыдущее
От: leao@world.std.com (Joao Leao)
Дата:
Сообщение: [HACKERS] Unsubscribe
Следующее
От: Phil Thompson
Дата:
Сообщение: Tcl Implementation of crypt()