Đó 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 JOIN
của vớiNOT EXISTS