PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego PostgreSQL nie może wykonać tego prostego FULL JOIN?

PostgreSQL implementuje FULL OUTER JOIN z haszem lub połączeniem scalającym.

Aby kwalifikować się do takiego przyłączenia, warunek przyłączenia musi mieć formę

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

Teraz warunek dołączenia tak wygląda tak, ale PostgreSQL nie ma specjalnego IS NOT DISTINCT FROM operatora, więc analizuje twój warunek na:

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

A takie wyrażenie nie może być użyte do złączeń mieszających lub scalających, stąd komunikat o błędzie.

Potrafię wymyślić sposób na obejście tego:

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 działa, jeśli <null> nie pojawia się nigdzie w value kolumny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować tablicę 2d z PostgreSQL DB na tablicę java 2d za pomocą JDBI?

  2. Korzystanie z funkcji okna OVER w SQLAlchemy

  3. Dzielenie ciągu oddzielonego przecinkami w funkcji PL/pgSQL

  4. Gdzie jest plik wyjściowy pg_dump w systemie MacOS?

  5. Zoptymalizuj PostgreSQL do szybkiego testowania