PostgreSQL implementuje FULL OUTER JOIN
s hash nebo sloučení spojení.
Abyste byli způsobilí pro takové spojení, podmínka připojení musí mít tvar
<expression using only left table> <operator> <expression using only right table>
Nyní vaše podmínka připojení splňuje vypadat takto, ale PostgreSQL nemá speciální IS NOT DISTINCT FROM
operátor, takže analyzuje vaši podmínku do:
(NOT ($1 IS DISTINCT FROM $2))
A takový výraz nelze použít pro hash nebo slučovací spojení, proto se zobrazuje chybová zpráva.
Napadá mě způsob, jak to obejít:
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;
To funguje, pokud <null>
se nikde v value
neobjevuje sloupce.