Tôi chỉ đọc về TRỪ và INTERSECT trong thư viện MSDN và đã xem qua ví dụ này về cách sử dụng INTERSECT:Tại sao EXCEPT tồn tại trong T-SQL?
USE AdventureWorks2008R2 GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Có lẽ tôi là cổ hủ, nhưng tôi thường sẽ sử dụng đoạn mã sau để đạt được cùng một kết quả:
SELECT P.ProductID
FROM Production.Product P
INNER JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
Tôi có thiếu thứ gì đó hoặc INTERSECT giống với INNER JOIN không? Có một lợi ích hiệu suất để sử dụng một trong những khác?
Câu hỏi tương tự cho EXCEPT. Làm thế nào là thế này:
USE AdventureWorks2008R2;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
khác nhau từ này:
SELECT P.ProductID
FROM Production.Product P
LEFT JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
WHERE W.ProductID IS NULL
?
-1: Đó không phải là cách INTERSECT hoạt động. Ví dụ đầu tiên của bạn không trả lại các sản phẩm có đơn đặt hàng công việc; nó trả về ID của bất kỳ sản phẩm nào có cùng id như id của một đơn đặt hàng công việc cho một sản phẩm. –