どのようにしてEXISTS
が機能するのか理解しようとしています。HAVING句でサブクエリが存在する
次のクエリはthis回答に基づいて、それはリースで、これらのレコードの1つがOrderQty > 1
とProductID = 777
を持つテーブルで1つの以上のレコードを持っているすべてのSalesOrderID
秒、のために照会されます。
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
の束です。なぜ\どのように、外部クエリはSales.SalesOrderDetail
の一部のみを返し、その全体は返しません。
サブクエリの 'WHERE'条件のためです。これは*相関サブクエリ*と呼ばれます。 –
@ GordonLinoffは、 'GROUP BY'が必要ですか?それがなければ同じ結果が得られます。 – HeyJude