4

'exists'句のサブクエリに'having'句があるSQLクエリを作成しようとしています。奇妙なことはそれです。エラーはなく、サブクエリはスタンドアロンクエリとして機能します。ただし、クエリ全体では、「having」句を使用した場合と使用しない場合でまったく同じ結果が得られます。
これは私のクエリがどのように見えるかのようなものです:

 SELECT X
   FROM A
  WHERE exists (
               SELECT X, count(distinct Y)
                 FROM B
             GROUP BY X
               HAVING count(distinct Y) > 2)  

そのため、XがBでYを2回以上出現する、Aから行を選択しようとしています。ただし、結果には、サブクエリに存在しないレコードも含まれます。私はここで何が間違っているのですか?

4

3 に答える 3

7

2 つのクエリを関連付けません。

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 を選択します。

「exists subquery」がテーブル B からレコードを 1 つでも返す場合、条件は true であり、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 に答える