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 по дате отправления:

Предыдущее
От: elein
Дата:
Сообщение: minimum operators for b-tree, r-tree
Следующее
От: Joe Conway
Дата:
Сообщение: Re: minimum operators for b-tree, r-tree