PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо PostgreSQL не може да направи това просто FULL JOIN?

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 колони.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на персонализиран JSON енкодер за изпълнението на PostgreSQL JSONB на SQLAlchemy

  2. Експортирайте конкретни редове от PostgreSQL таблица като INSERT SQL скрипт

  3. Доклад на Jasper:не може да получи стойност за поле „x“ от клас „org.postgresql.util.PGmoney“

  4. Рефакториране на външния ключ към полета

  5. Най-добри практики за репликация на PostgreSQL – част 2