2017-06-29 4 views
0

私はキーをフィルタリングしてキーのリストを取得する必要があるこのようなテーブルを持っています。特定のキーを含めてリストを取り出す方法は?

id key 
1 1 
1 2 
1 3 
1 4 
2 1 
2 3 
3 1 
3 4 
4 1 
4 4 

所望の出力:ここで私はキー1が存在し、2が欠落しているキーであるのidすなわち(2,3)のリストを取得したい

id key 
2 1 
2 3 
3 1 
3 4 

+0

「ここに1があり、2がありません」と明記してください。 "希望の出力"セクションによれば、WHERE句(WHERE id> 1とid <4)などを書いていますが、あなたのすべてのケースを解決できないような気がします。 – RemedialBear

+0

@ChirayuChamoli 。 。 id = 3はkey = 1を持っていません。 –

答えて

1

「ここで私はキー1が存在し、キー2が見つからないIDのリストを取得したいと思っています。

あなたが existsnot existsを使用することができます

select t.* 
from t 
where exists (select 1 from t t2 where t2.id = t.id and t2.key = 1) and 
     not exists (select 1 from t t2 where t2.id = t.id and t2.key = 2); 

あなただけのidをしたい場合は、私が集約してhavingを好む:

select id 
from t 
group by id 
having sum(case when key = 1 then 1 else 0 end) > 0 and 
     sum(case when key = 2 then 1 else 0 end) = 0; 
+0

これはうまく動作します。それは私に別個のIDを与えますが、それらを数えれば1をすべて得ます。何か案が?少しの説明もすばらしいでしょう。 –

+0

'sum()'や 'count()'を使っていますか? –

+0

私は数を試してから、そのIDに1を与えてくれました。 –

0

は、あなたのテーブル名が、その後によると「テスト」されていると上記の出力がSQLクエリになります

SELECT * FROM testing WHERE key!= 2 and id in(2,3)

関連する問題