我試圖瞭解如何EXISTS
工作。存在與HAVING子句的子查詢
下面的查詢基於this答案,它查詢所有SalesOrderID
s表示在表中有超過1分的記錄,其中以租賃的那些記錄一個具有OrderQty > 1
和ProductID = 777
:
USE AdventureWorks2012;
GO
SELECT SalesOrderID, OrderQty, ProductID
FROM Sales.SalesOrderDetail s
WHERE EXISTS
( SELECT 1
FROM Sales.SalesOrderDetail s2
WHERE s.SalesOrderID = s2.SalesOrderID
GROUP BY SalesOrderID
HAVING COUNT(*) > 1
AND COUNT(CASE WHEN OrderQty > 1 AND ProductID = 777 THEN 1 END) >= 1
);
什麼我不明白是這樣的:子查詢返回每行填充值爲1
的單列圓桌。所以我理解它的方式,外層查詢中的WHERE
沒有適用的實際條件,只是一堆1
s。爲什麼\然後,外部查詢只返回Sales.SalesOrderDetail
的一部分,而不是全部?
由於子查詢中的WHERE條件。這被稱爲*相關子查詢*。 –
@GordonLinoff,是否需要'GROUP BY'?沒有它,它會得到相同的結果。 – HeyJude