我试图做一个SQL查询,其中在“存在”子句子查询有一个“具有”条款。 奇怪的是这一点。 有没有错误,子查询可以作为一个独立的查询。 然而,整个查询给人恰与“具有”条款作为不相同的结果。
这是什么样的我的查询是这样的:
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两个以上occurances行然而,结果还包括没有在子查询中存在的记录。 我在做什么错在这里?
你不关联的两个查询:
SELECT X
FROM A
WHERE (
SELECT COUNT(DISTINCT y)
FROM b
WHERE b.x = a.x
) > 2
您的查询说是这样的:
从A选择X IF有如果由Y中B.分组具有多于一个occurence记录
如果你的“存在子查询”从表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
)
我也有类似的情况,并通过解决的加入,因为其他的答案并没有为我工作。 我试图关联到你的普通例子。 希望这是有帮助别人!
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