Я использую SQL Server 2005 и обнаружил странное поведение предложения HAVING
.
По определению условие HAVING
: предполагается, что будет работать с данными после того, как было сгруппировано.Однако использование функции COUNT
внутри предложения HAVING
фактически применяется к данным до их группировки.
Что мне здесь не хватает ??
Образец данных:
DECLARE @ProductTypeIDsTable TABLE
(
A INT
)
INSERT INTO @ProductTypeIDsTable(A) VALUES
(10),(12),(12),(9),(9),(9)
DECLARE @IDsTable TABLE
(
B INT
)
INSERT INTO @IDsTable(B) VALUES
(9),(10),(12)
Запрос в вопросе:
SELECT A
FROM @ProductTypeIDsTable pt
INNER JOIN @IDsTable ids ON pt.A = ids.B
GROUP BY A
--HAVING COUNT (A) = 1 -- gives 10 (repeated once due to the join)
--HAVING COUNT (A) = 2 -- gives 12 (repeated twice due to the join)
HAVING COUNT (A) = 3 -- gives 9 (repeated thrice due to the join)