4

我正在尝试进行 SQL 查询,其中“exists”子句中的子查询具有“have”子句。奇怪的是。没有错误,并且子查询作为独立查询工作。但是,整个查询给出的结果与没有 'have' 子句的结果完全相同。
这是我的查询的样子:

 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。但是,结果还包括子查询中不存在的记录。我在这里做错了什么?

4

3 回答 3

7

您不关联这两个查询:

SELECT  X
FROM    A
WHERE   (
        SELECT  COUNT(DISTINCT y)
        FROM    b
        WHERE   b.x = a.x
        ) > 2
于 2012-06-01T11:54:47.250 回答
4

您的查询是这样说的:

如果在 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
             )
于 2012-06-01T12:10:20.490 回答
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
于 2018-09-13T20:52:36.877 回答