在通过子查询创建的列表中查找值

finding value in a list created via subquery

谢谢 Stack 社区,

这对你们大多数人来说可能是显而易见的,但我只是不明白为什么它不起作用。

我正在使用 Northwind 数据库,可以说我正在尝试查找出现或未出现两次但被列出的次数超过两次或更少的国家/地区。

我已经找到了使用 having 语句的其他方法,所以我不是在寻找替代方法,而是试图理解为什么我最初的尝试不起作用。

我看了又看,这对我来说非常有意义。有人可以解释什么问题吗?

SELECT  country, count(country)
FROM Customers
WHERE 2 not in (SELECT count(country) FROM Customers GROUP BY country) 
GROUP BY country
;

您需要关联子查询:

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (SELECT count(country) FROM Customers c2 
                WHERE c2.country = c.country ) 
GROUP BY country;

否则你会得到类似的东西:

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (1,2,3) -- false in every case and empty resultset
GROUP BY country;

假设您有:

1, 'UK'    -- 1
2, 'DE'    -- 2
3, 'DE'
4, 'RU'    -- 1

现在您将获得相当于

SELECT  country, count(country)
FROM Customers c
WHERE 2 not in (1,2,1) -- false in every case and empty resultset
GROUP BY country;

 -- 0 rows selected