On Wed, Apr 21, 2021 at 4:37 PM David Rowley <dgrowle...@gmail.com> wrote:

> On Wed, 21 Apr 2021 at 14:55, Andy Fan <zhihui.fan1...@gmail.com> wrote:
> >  * However, this optimization *only*
> >  * works at the top level of WHERE or a JOIN/ON clause, because we cannot
> >  * distinguish whether the ANY ought to return FALSE or NULL in cases
> >  * involving NULL inputs. Also, in an outer join's ON clause we can only
> >  * do this if the sublink is degenerate (ie, references only the nullable
> >  * side of the join).
> >
> > I tried to write some SQLs but still can't understand the above
> comments. Any
> > help here?
>
> The code there is trying to convert sub links into joins.
>
> For example:
>
> explain select * from pg_Class where oid in (select attrelid from
> pg_attribute);
>
> can be implemented as a join rather than a subplan or hashed subplan.
> You should either see a Semi Join there or a regular join with the
> pg_attribute side uniquified.
>
> Check the plan when you change the above into NOT IN.  We don't
> currently pull those up to become joins due to the fact that the null
> behaviour for NOT IN is not compatible with anti-joins.
>
> I just checked the "Not In to Join" thread some days ago, but didn't
realize it here.  Thank you David for your hint.

-- 
Best Regards
Andy Fan (https://www.aliyun.com/)

Reply via email to