sql >> Databáze >  >> RDS >> PostgreSQL

Proč PostgreSQL nemůže udělat tento jednoduchý FULL JOIN?

PostgreSQL implementuje FULL OUTER JOIN s hash nebo sloučení spojení.

Abyste byli způsobilí pro takové spojení, podmínka připojení musí mít tvar

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

Nyní vaše podmínka připojení splňuje vypadat takto, ale PostgreSQL nemá speciální IS NOT DISTINCT FROM operátor, takže analyzuje vaši podmínku do:

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

A takový výraz nelze použít pro hash nebo slučovací spojení, proto se zobrazuje chybová zpráva.

Napadá mě způsob, jak to obejít:

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;

To funguje, pokud <null> se nikde v value neobjevuje sloupce.



  1. Redshift - Převod řetězce epochy na časové razítko

  2. Zabraňuje specifikace JDBC '?' od použití jako operátor (mimo uvozovek)?

  3. Jak zjistím poslední den předchozího měsíce pomocí PostgreSQL?

  4. Chyba dynamického vstupu do Mysql pomocí PHP