Я пытаюсь понять, как работает EXISTS
.Существует суб-запрос с предложением HAVING
Следующий запрос основан на this ответ, и он запрашивает для всех SalesOrderID
с, которые имеют более чем на 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
);
Что Я не понимаю: Sub-query возвращает таблицу с одним столбцом, заполненную значением 1
для каждой строки. Таким образом, как я понимаю, во внешнем запросе WHERE
не имеет реального условия для применения, просто связка 1
s. Почему \ Как, тогда внешний запрос возвращает только часть Sales.SalesOrderDetail
, а не его целостность?
Из-за условия 'WHERE' в подзапросе. Это называется * коррелированным подзапросом *. –
@ GordonLinoff, требуется 'GROUP BY'? он дает тот же результат без него. – HeyJude