在exists子句中使用count()

时间:2012-06-01 11:51:18

标签: sql sql-server-2008

我正在尝试进行SQL查询,其中'exists'子句中的子查询具有'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出现。 但是,结果还包括子查询中不存在的记录。我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

您没有关联这两个查询:

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

答案 1 :(得分:4)

你的查询是这样的:

从A中选择X如果在B中按Y分组,则记录中有多个记录。

如果'exists子查询'返回表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
             )

答案 2 :(得分:0)

我遇到了类似的情况,并通过JOIN解决了,因为其他答案对我不起作用。我试图关联到您的通用示例。希望对其他人有帮助!

rowid_to_column(iris, "row_name")