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
में कहीं भी दिखाई नहीं देता कॉलम।