0

次のようなテーブルがあります。

KID       GRP
1         ABS
1         AOR
1         AOR
2         ABS
2         ABS
2         ABS
2         AOR
2         ZVN
3         ABS

そして、ABS や AOR のような GRP を持つすべての KID を見つける必要があります。したがって、期待される結果は 1 と 2 です。

このエントリを検索できる SELECT ステートメントはどれですか?

前もって感謝します...

4

4 に答える 4

2

あなたが試すことができます:

SELECT KID       
FROM mytable
WHERE GRP IN ('ABS', 'AOR')
GROUP BY KID  
HAVING COUNT(DISTINCT GRP) = 2

このWHERE句は、('ABS', 'AOR')行以外を除外します。この句は、両方に関連付けられている値HAVINGのみが選択されることを保証します。KID ('ABS', 'AOR')

于 2015-08-18T14:41:42.473 に答える
1

相関サブクエリを使用する 1 つのオプション:

SELECT DISTINCT KID       
FROM TableName t
WHERE EXISTS(SELECT 1 FROM TableName t2 
             WHERE t2.GRP='ABS' AND t.KID=t2.KID)
  AND EXISTS(SELECT 1 FROM TableName t2 
             WHERE t2.GRP='AOR' AND t.KID=t2.KID)

Demo

GROUP BYリストが大きくなった場合に適した別の使用方法を次に示します。

SELECT KID       
FROM TableName t
WHERE t.GRP IN('ABS', 'AOR')
GROUP BY KID
HAVING COUNT(DISTINCT t.GRP) = 2

Demo

于 2015-08-18T14:32:10.987 に答える
0

Where と Exists の組み合わせを使用できます

select kid from tablename a where exists
(select 1 from tablename b where b.KID = a.KID and b.GRP = 'ABS')
and GRP = 'AOR'

これにより、使用せずに各 KID に対して 1 つの結果のみを取得することも保証されます。distinct

于 2015-08-18T14:35:36.823 に答える
0
select kid from tablename where grp = 'ABS'
intersect
select kid from tablename where grp = 'AOR'

intersectデータベースで許可されている場合に使用できます。

于 2015-08-18T14:32:28.263 に答える