Re: Allowing NOT IN to use ANTI joins

Поиск
Список
Период
Сортировка
От Marti Raudsepp
Тема Re: Allowing NOT IN to use ANTI joins
Дата
Msg-id CABRT9RDtE+E0=VWm_aFvhfaQ1R+g54OOxs85y+KeYEgQmuYgWQ@mail.gmail.com
обсуждение исходный текст
Ответ на Allowing NOT IN to use ANTI joins  (David Rowley <dgrowleyml@gmail.com>)
Ответы Re: Allowing NOT IN to use ANTI joins
Re: Allowing NOT IN to use ANTI joins
Список pgsql-hackers
On Sun, Jun 8, 2014 at 3:36 PM, David Rowley <dgrowleyml@gmail.com> wrote:
> Currently pull_up_sublinks_qual_recurse only changes the plan for NOT EXISTS
> queries and leaves NOT IN alone. The reason for this is because the values
> returned by a subquery in the IN clause could have NULLs.

There's a bug in targetListIsGuaranteedNotToHaveNulls, you have to
drill deeper into the query to guarantee the nullability of a result
column. If a table is OUTER JOINed, it can return NULLs even if the
original column specification has NOT NULL.

This test case produces incorrect results with your patch:

create table a (x int not null);
create table b (x int not null, y int not null);
insert into a values(1);
select * from a where x not in (select y from a left join b using (x));

Unpatched version correctly returns 0 rows since "y" will be NULL.
Your patch returns the value 1 from a.

Regards,
Marti



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

Предыдущее
От: Marti Raudsepp
Дата:
Сообщение: Re: Allowing NOT IN to use ANTI joins
Следующее
От: David Rowley
Дата:
Сообщение: Re: Allowing NOT IN to use ANTI joins