在exists子句中使用having count()

4

我想制作一个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个回答

7

您没有将这两个查询联系起来:

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

啊,是的,这听起来像个好主意。我会研究相关查询的。我认为这将有助于我进一步解决这个问题 :) - Sander

4

您的查询语句大致如下:

从表A中选择X,如果在表B中按Y分组后有多个记录,则存在多次出现的记录。

如果您的“存在子查询”从表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
             )

1

我遇到了类似的情况,并通过使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接