2016-12-13 6 views
2

私は現在、http://www.w3resource.com/sql/special-operators/sql_exists.php#のEXISTS演算子の例を調べていますが、意味をなさない例があります。次のようにコードは次のとおりです。GROUP BYのSQL EXISTS演算子

SELECT cust_code,cust_name,cust_city,grade 
FROM customer 
WHERE grade=2 AND 
    EXISTS( 
     SELECT COUNT(*) 
     FROM customer 
     WHERE grade=2 
     GROUP BY grade 
     HAVING COUNT(*)>2 
    ); 

を私の理解から、サブクエリは、常にTRUEと評価され、それが高いアップ、顧客テーブルに関連していない - そこにそれを置くために無関係と思われます。

ここで達成しようとしているコードについて誰でも説明できますか?

多くのありがとうございます!

+0

サブクエリーは、グレード= 2の顧客が2人未満の場合は結果を返しません。 – user3012759

+0

w3resourceのウェブサイトで説明されています。 – McNets

+0

'...顧客テーブルの上位には関係ありません。あなたは正しいです。それは正しいが、この例はひどいIMOだ。 – joop

答えて

1

このコードは、少なくとも 2のレコードがgrade = 2customerテーブルの上にあることを検証していない場合は、レコードがフィルタリングされます。 grade=2とつ以上のレコードがある場合grade=2を持つレコードの数がより少ないまたは2クエリのチェックに等しいとき

2

EXISTSfalseと評価されます。外側に記載されているショーの列がある場合select

+0

正しい場合、クエリでは、そのような顧客は少なくとも3人で、それ以外は誰もいない。 –

0

第2のサブクエリは、一年生は、以下のクエリの次のセクション2

SELECT COUNT(*) 
FROM customer 
WHERE grade=2 

に等しい顧客テーブルのすべての行を取得することにより動作します。これらすべての行をグレード別にグループ化します。

GROUP BY grade 

最後に、以下のカウントコードを有するものは、その中に少なくとも2つの項目を有していないグループを除外する。

HAVING COUNT(*)>2 

このように、多くの人が成績を持ち、これが顧客表に入力される状況が発生する可能性があります。 2人以上の人が同じ等級を持っていない場合、このクエリは結果を見つけることができません。

0

グレード= 2 がEXISTS

SELECT COUNT(顧客
FROM ) WHERE BYグレード= 2
GROUPグレード
HAVING COUNT(
)> 2 )。

TRUE and TRUE =TRUE 

だからあなたのクエリのかどうかをチェックするグレード= 2と少なくとも1つの行は、両方の条件がsatifyしない場合は、クエリがすべての結果セットを返さない条件以下

WHERE grade=2 
     GROUP BY grade 
     HAVING COUNT(*)>2 

であり