PostgreSQL прилага FULL OUTER JOIN
или с хеш, или с обединяване.
За да отговаря на условията за такова присъединяване, условието за присъединяване трябва да има формата
<expression using only left table> <operator> <expression using only right table>
Сега вашето условие за присъединяване изпълнява изглежда така, но PostgreSQL няма специален IS NOT DISTINCT FROM
оператор, така че анализира вашето условие на:
(NOT ($1 IS DISTINCT FROM $2))
И такъв израз не може да се използва за хеширане или обединяване, оттук и съобщението за грешка.
Мога да измисля начин да го заобиколя:
SELECT a_id, NULLIF(a_value, '<null>'),
b_id, NULLIF(b_value, '<null>')
FROM (SELECT id AS a_id,
COALESCE(value, '<null>') AS a_value
FROM a
) x
FULL JOIN
(SELECT id AS b_id,
COALESCE(value, '<null>') AS b_value
FROM b
) y
ON x.a_value = y.b_value;
Това работи, ако <null>
не се появява никъде в value
колони.