我正在尝试创建一个SQL查询,其中'exists‘子句中的子查询有一个'having’子句。奇怪的是。没有错误,子查询作为独立查询工作。但是,使用'having‘子句的整个查询结果与没有’having‘子句的结果完全相同。
这就是我的查询:
SELECT X
FROM A
WHERE exists (
SELECT X, count(distinct Y)
FROM B
GROUP BY X
HAVING count(distinct Y) > 2) 因此,我尝试从A中选择行,其中X在B中Y的出现次数超过两次。但是,结果还包括子查询中不存在的记录。我在这里做错了什么?
发布于 2012-06-01 19:54:47
您不需要关联这两个查询:
SELECT X
FROM A
WHERE (
SELECT COUNT(DISTINCT y)
FROM b
WHERE b.x = a.x
) > 2发布于 2012-06-01 20:10:20
您的查询如下所示:
如果有多个记录在B中按Y分组,则从A中选择X。
如果您的‘Existes子查询’返回表B中的一条记录,则条件为真,您将从A中获取所有行。
尝试:
select X
from A
where exists (select 1
from B
where B.x = A.x
group by b.x
having count(distinct b.y) > 2
)发布于 2018-09-14 04:52:37
我遇到了类似的情况,并通过连接解决了问题,因为其他答案对我不起作用。我试着与你的通用示例相关联。希望对其他人有帮助!
SELECT X
FROM A
JOIN (SELECT X, COUNT(DISTINCT y)
FROM B
GROUP BY X
HAVING count(distinct Y) > 2) C
ON A.X = C.Xhttps://stackoverflow.com/questions/10849731
复制相似问题