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

Quá nhiều Left Joins có phải là một mã có mùi không?

Đó 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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server tìm kiếm một cột theo tên

  2. 3 cách để tìm hiểu xem một cột có phải là một cột được tính toán trong SQL Server hay không

  3. SQL Server FileStream cách điền cột dòng lọc

  4. Tổng hợp Hàm SQL để chỉ lấy hàm đầu tiên từ mỗi nhóm

  5. Làm cách nào để tìm thư mục dữ liệu cho phiên bản SQL Server?