Re: WIP: patch to create explicit support for semi and anti joins - Mailing list pgsql-hackers

From David E. Wheeler
Subject Re: WIP: patch to create explicit support for semi and anti joins
Date
Msg-id 00F80109-42F8-4E1A-A850-B787BE3FEEDF@kineticode.com
Whole thread Raw
In response to Re: WIP: patch to create explicit support for semi and anti joins  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Aug 13, 2008, at 20:12, Tom Lane wrote:

>> Wow. That sound awesome, Tom. Stupid question: Do these join types
>> have some sort of correspondence to the SQL standard?
>
> Semi and anti joins are pretty standard concepts in relational theory,
> but they have no direct mapping in the SQL join syntax.  You can write
> them with certain well-known locutions, though:
>     IN and EXISTS, with certain restrictions, represent semi join
>     NOT EXISTS, with certain restrictions, represents anti join
>     LEFT JOIN with an "incompatible" higher IS NULL test represents  
> anti join
>
> Basically what this patch is about is teaching the planner that these
> constructs are best understood via the relational-theory concepts.
> We'd been doing it in a pretty ad-hoc way before, and run into a lot
> of problems that we've had to kluge around.  I think that this  
> approach
> provides a structure that will actually work well.

Great. Thanks for the explanation, Tom, as always.

>> Or is this just something that's under the
>> hood an not actually a change to the syntax of SQL joins?
>
> Right, there's no "user visible" feature or syntax change here.  We're
> just trying to provide better performance for certain common SQL  
> idioms.

Good, it makes a lot of sense.

>
>>> What's not done:
>>>
>>> nodeMergejoin.c doesn't yet handle JOIN_ANTI.  (This is just a SMOP,
>
>> I guess that means you plan to do it once there has been significant
>> testing with nestloop and hash and when the selectivity stuff is  
>> done?
>
> Actually, I got it done an hour or so ago --- it turned out to be  
> easier
> than I thought.  It just didn't seem like part of the critical path  
> for
> the patch, so I'd been willing to let it go till later.

I love it when things work that way. :-)

Best,

David



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: WIP: patch to create explicit support for semi and anti joins
Next
From: Andrew Gierth
Date:
Subject: Re: SeqScan costs