Re: FULL JOIN and mergjoinable conditions...
От | Tom Lane |
---|---|
Тема | Re: FULL JOIN and mergjoinable conditions... |
Дата | |
Msg-id | 4188.1088572823@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | FULL JOIN and mergjoinable conditions... (Martijn van Oosterhout <kleptog@svana.org>) |
Список | pgsql-general |
Martijn van Oosterhout <kleptog@svana.org> writes: > Today I got the error: > ERROR: FULL JOIN is only supported with mergejoinable join conditions > Which is really annoying since a full join is exactly what I wanted. I > guess the alternative is to do a left join and a right join and merge > them? Is it just that no-one has come up with a way to code this > efficiently? How would you do it? It seems fairly impractical with an underlying nestloop join --- you'd need persistent state for *every* row of the inner relation to show whether any outer row had matched it. You could imagine doing it with a hash join (mark every hash table entry when it gets visited by an outer-row hash probe, then traverse the hash table at the end to emit unvisited rows). But a quick look into pg_operator convinces me that this would be pointless to implement, because we have no interesting datatypes that support hash join but not mergejoin. And hashjoins are only practical with relatively-small inner relations anyway. Not to mention that hashjoin isn't any more amenable to inequality join conditions than mergejoin is... regards, tom lane
В списке pgsql-general по дате отправления: