From: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Nicolas Fertig <nfertig(at)swissnow(dot)ch>, <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: OUTER JOIN with filter |
Date: | 2003-03-02 07:33:00 |
Message-ID: | 20030301232815.Q24208-100000@megazone23.bigpanda.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Sun, 2 Mar 2003, Tom Lane wrote:
> Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> writes:
> > On Sat, 1 Mar 2003, Nicolas Fertig wrote:
> >> Can anyone help me with the problem bellow ?
> >>
> >> SELECT TM.some_field, TS.name
> >> FROM table_main TM
> >> LEFT OUTER JOIN (SELECT name FROM table_slave WHERE c1 = 'myvalue') TS
> >> USING(id)
>
> > select tm.some_field, ts.name
> > from table_main tm left outer join table_slave ts
> > on (tm.id=ts.id and ts.c1='myvalue');
>
> Offhand I believe that these queries should generate identical plans.
> They do not at the moment --- the second one generates a worse plan
> (sorry Stephan ;-)) --- because the planner does not realize it could
I wasn't really sure if it would or not (wrote it without testing on a
running server), actually I didn't realize it wouldn't push down, and
figured it'd give pretty much the same plan, but it is less verbose. :)
> push down the ts.c1='myvalue' JOIN condition into the scan of ts, even
> though the join is OUTER. But AFAICS it would not change the results to
> do so; ts rows failing ts.c1='myvalue' will not produce join output
> anyway, but would allow outer-joined lefthand rows to be produced. (Can
> anyone see a hole in that logic? It's on my to-do list to change it...)
I don't see an obvious case where it'd be different either.
From | Date | Subject | |
---|---|---|---|
Next Message | Denis Zaitsev | 2003-03-02 09:24:01 | default operator class (PostgreSQL's error?) |
Previous Message | Tom Lane | 2003-03-02 07:09:17 | Re: OUTER JOIN with filter |