PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengapa PostgreSQL tidak dapat melakukan GABUNG LENGKAP sederhana ini?

PostgreSQL mengimplementasikan FULL OUTER JOIN dengan hash atau gabungan gabungan.

Agar memenuhi syarat untuk bergabung seperti itu, syarat bergabung harus memiliki formulir

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

Sekarang kondisi bergabung Anda tidak terlihat seperti ini, tetapi PostgreSQL tidak memiliki IS NOT DISTINCT FROM khusus operator, sehingga mengurai kondisi Anda menjadi:

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

Dan ekspresi seperti itu tidak dapat digunakan untuk hash atau gabungan gabungan, oleh karena itu pesan kesalahannya.

Saya bisa memikirkan cara untuk mengatasinya:

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;

Itu berfungsi jika <null> tidak muncul di mana pun di value kolom.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyortiran alfanumerik dengan PostgreSQL

  2. menyapu dibatalkan! Permata::LoadError:Ditentukan 'postgresql' untuk adaptor database

  3. apakah adaptor rails postgres mendukung ssl?

  4. JPA SequenceGenerator dan GeneratedValue:nama/properti generator unik hanya per kelas?

  5. Memperbarui DB postgreSQL melalui migrasi EFCore di Azure DevOps