PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tại sao PostgreSQL không thể thực hiện FULL JOIN đơn giản này?

PostgreSQL triển khai FULL OUTER JOIN với hàm băm hoặc phép hợp nhất.

Để đủ điều kiện tham gia như vậy, điều kiện tham gia phải có dạng

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

Bây giờ, điều kiện tham gia của bạn không trông giống như thế này, nhưng PostgreSQL không có IS NOT DISTINCT FROM toán tử, vì vậy nó phân tích điều kiện của bạn thành:

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

Và một biểu thức như vậy không thể được sử dụng cho các phép nối băm hoặc hợp nhất, do đó có thông báo lỗi.

Tôi có thể nghĩ ra một cách để giải quyết vấn đề đó:

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;

Điều đó hoạt động nếu <null> không xuất hiện ở bất kỳ đâu trong giá trị value cột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một truy vấn PostgreSQL thô bị treo khi được thực thi với TypeOrm

  2. Điều gì đã thay đổi giữa postgres jdbc 8.4 và 9 liên quan đến bytearrays?

  3. Tạo thứ hạng trình tự có thứ tự trên truy vấn phức tạp

  4. PostgreSQL không sử dụng chỉ mục một phần

  5. Xóa các hàng trống