Đó là một giải pháp hoàn toàn hợp pháp cho một số thiết kế.
Giả sử bạn có hệ thống phân cấp quan hệ một-nhiều như Customer - Order - Basket - Item - Price , v.v., có thể được giải phóng ở bất kỳ cấp độ nào:Customer có thể không có Order , một Order không thể có Basket , v.v.
Trong trường hợp này, bạn đưa ra một cái gì đó như:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Lưu ý rằng nó có thể không hiệu quả trong một số trường hợp và có thể được thay thế bằng EXISTS hoặc NOT EXISTS (nếu bạn chỉ muốn tìm hiểu xem các bản ghi tương ứng tồn tại hay không tồn tại trong các bảng khác).
Xem bài viết này trong blog của tôi để biết chi tiết về hiệu suất:
- Tìm đơn đặt hàng chưa hoàn thành
- cách hưởng lợi từ việc thay thế
LEFT JOINcủa vớiNOT EXISTS