我只是讀有關EXCEPT和INTERSECT MSDN Library中和整個相交如何使用這個例子就是:爲什麼EXCEPT在T-SQL中存在?
USE AdventureWorks2008R2 GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
也許我老土,但我通常會用下面的代碼來實現同樣的結果:
SELECT P.ProductID
FROM Production.Product P
INNER JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
我失去的東西,或者是相交一樣INNER JOIN?使用其中一種可以帶來性能上的好處嗎?
除了相同的問題。這是怎麼回事:
從這個USE AdventureWorks2008R2;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
不同:
SELECT P.ProductID
FROM Production.Product P
LEFT JOIN Production.WorkOrder W ON W.ProductID = P.ProductID
WHERE W.ProductID IS NULL
?
-1:這不是INTERSECT的工作方式。您的第一個示例不返回具有工單的產品;它將返回與產品的工單的ID號相同的任何產品的ID。 – 2012-02-02 04:06:01