Re: OUTER JOIN with filter
От | Tom Lane |
---|---|
Тема | Re: OUTER JOIN with filter |
Дата | |
Msg-id | 16210.1046588957@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: OUTER JOIN with filter (Stephan Szabo <sszabo@megazone23.bigpanda.com>) |
Ответы |
Re: OUTER JOIN with filter
|
Список | pgsql-sql |
Stephan Szabo <sszabo@megazone23.bigpanda.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 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 concur with the other comments that there's nothing wrong with the given query ... other than such trivial details as it doesn't work ... the sub-select doesn't produce an ID column. So I think Nicolas is giving us an over-censored description of his real problem; but without the omitted details, we're not likely to offer much useful help. regards, tom lane
В списке pgsql-sql по дате отправления: