PostgreSQL mengimplementasikan FULL OUTER JOIN
dengan hash atau gabungan gabungan.
Agar memenuhi syarat untuk bergabung seperti itu, syarat bergabung harus memiliki formulir
<expression using only left table> <operator> <expression using only right table>
Sekarang kondisi bergabung Anda tidak terlihat seperti ini, tetapi PostgreSQL tidak memiliki IS NOT DISTINCT FROM
khusus operator, sehingga mengurai kondisi Anda menjadi:
(NOT ($1 IS DISTINCT FROM $2))
Dan ekspresi seperti itu tidak dapat digunakan untuk hash atau gabungan gabungan, oleh karena itu pesan kesalahannya.
Saya bisa memikirkan cara untuk mengatasinya:
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;
Itu berfungsi jika <null>
tidak muncul di mana pun di value
kolom.