使用具有计数()中存在的条款(Using having count() in exists clau

2019-09-17 16:41发布

我试图做一个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行然而,结果还包括没有在子查询中存在的记录。 我在做什么错在这里?

Answer 1:

你不关联的两个查询:

SELECT  X
FROM    A
WHERE   (
        SELECT  COUNT(DISTINCT y)
        FROM    b
        WHERE   b.x = a.x
        ) > 2


Answer 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
             )


Answer 3:

我也有类似的情况,并通过解决的加入,因为其他的答案并没有为我工作。 我试图关联到你的普通例子。 希望这是有帮助别人!

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


文章来源: Using having count() in exists clause