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
のどこにも表示されません 列。