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: