sql >> Database >  >> RDS >> PostgreSQL

Waarom kan PostgreSQL deze eenvoudige FULL JOIN niet doen?

PostgreSQL implementeert FULL OUTER JOIN met ofwel een hash of een merge join.

Om in aanmerking te komen voor een dergelijke join, moet de join-voorwaarde de vorm hebben

<expression using only left table> <operator> <expression using only right table>

Nu uw deelnamevoorwaarde doet ziet er zo uit, maar PostgreSQL heeft geen speciale IS NOT DISTINCT FROM operator, dus het ontleedt uw voorwaarde in:

(NOT ($1 IS DISTINCT FROM $2))

En een dergelijke uitdrukking kan niet worden gebruikt voor hash- of merge-joins, vandaar de foutmelding.

Ik kan een manier bedenken om er omheen te werken:

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;

Dat werkt als <null> verschijnt nergens in de value kolommen.



  1. SET en SELECT binnen een enkele query?

  2. Hoe het tijdgedeelte van een datetime-waarde (SQL Server) te verwijderen?

  3. Neo4j-installatie

  4. MySQL met Entity Framework - wat doe ik verkeerd?