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 по дате отправления: