sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför kan inte PostgreSQL göra detta enkla FULL JOIN?

PostgreSQL implementerar FULL OUTER JOIN med antingen en hash eller en sammanfogning.

För att vara berättigad till en sådan anslutning måste anslutningsvillkoret ha formuläret

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

Nu gör ditt anslutningsvillkor ser ut så här, men PostgreSQL har inte en speciell IS NOT DISTINCT FROM operatorn, så den analyserar ditt tillstånd till:

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

Och ett sådant uttryck kan inte användas för hash eller merge joins, därav felmeddelandet.

Jag kan komma på ett sätt att komma runt det:

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;

Det fungerar om <null> visas inte någonstans i value kolumner.



  1. Använd IN-direktivet för att söka med ett förberett utlåtande

  2. Introduktion till Oracle RMAN

  3. Välj det senaste meddelandet mellan kommunikationen mellan två användare i mysql

  4. Kämpar med anpassad SQL-fråga