我正在尝试进行SQL查询,其中"存在"子句中的子查询具有"haveing"子句。奇怪的是。没有错误,子查询作为独立查询工作。但是,整个查询给出的结果与"haveing"子句与不使用子句的结果完全相同。
这是我的查询的样子:
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。但是,结果还包括子查询中不存在的记录。我在这里做错了什么?
您不关联这两个查询:
SELECT X
FROM A
WHERE (
SELECT COUNT(DISTINCT y)
FROM b
WHERE b.x = a.x
) > 2
您的查询如下所示:
如果在 B 中按 Y 分组,则如果存在具有多个匹配项的记录,则从 A 中选择 X。
如果你的"存在子查询"从表 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
)
我也有类似的情况,并通过 JOIN 解决了,因为其他答案对我不起作用。 我试图与您的通用示例相关联。 希望对别人有帮助!
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.X