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

Nhiều kết hợp bên trái trên nhiều bảng trong một truy vấn

Loại truy vấn này sẽ hoạt động - sau khi viết lại bằng JOIN rõ ràng cú pháp:

SELECT something
FROM   master parent
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
,      master child
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  child.parent_id = parent.id
AND    parent.parent_id = 'rootID'

Dây vấp ở đây là JOIN rõ ràng liên kết trước "kiểu cũ" CROSS JOIN với dấu phẩy ( , ). Tôi trích dẫn sách hướng dẫn tại đây:

Sau khi viết lại phần đầu tiên, tất cả các phép nối được áp dụng từ trái sang phải (về mặt logic - Postgres có thể tự do sắp xếp lại các bảng trong kế hoạch truy vấn nếu không) và nó hoạt động.

Chỉ để nói rõ ý của tôi, điều này cũng sẽ hoạt động:

SELECT something
FROM   master parent
LEFT   JOIN second parentdata ON parentdata.id = parent.secondary_id
,      master child
LEFT   JOIN second childdata ON childdata.id = child.secondary_id
WHERE  child.parent_id = parent.id
AND    parent.parent_id = 'rootID'

Nhưng JOIN rõ ràng cú pháp thường thích hợp hơn, như trường hợp của bạn minh họa một lần nữa.

Và lưu ý rằng nhiều (LEFT ) JOIN có thể nhân các hàng:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django + Postgres:giao dịch hiện tại bị hủy bỏ, các lệnh bị bỏ qua cho đến khi kết thúc khối giao dịch

  2. Xóa hàng khỏi bảng cơ sở có ảnh hưởng đến chế độ xem của bảng đó không?

  3. Chỉ định múi giờ để sử dụng làm múi giờ tham chiếu

  4. Cách mã hóa một cột trong Postgres bằng Hibernate @ColumnTransformer

  5. Tạo mảng trong SELECT