2017-01-28 18 views
1

私は、次の形式でデータを持っている:SQL条件付きフィルタ

ID Val 
1 abc 
1 xyz 
2 abc 
3 abc 
3 pqr 
3 xyz 
4 abc 

は今、私は「ABC」以外の値を持っていないIDを望みます。これはID 2,4のみが必要であることを意味します。 1,3はabcと他の2つの値を持ちます。出力は

ID Val 
2 abc 
4 abc 

のようになります。私が試した:

SELECT ID, Val from 
Table 
WHERE Val = 'abc' 
AND Val != 'xyz' 
AND Val != 'pqr' 

をこれは私にすべてのIDを提供します。 考えていますか? 助けてください!

答えて

2

サブクエリでこの特定の基準を満たす行を単純に数えます。

SELECT ID, Val from 
Table T1 
WHERE T1.Val = 'abc' 
AND 1 = (SELECT COUNT(ID) FROM Table T2 WHERE T2.ID = T1.ID) 

、あるいは

SELECT ID, Val from 
Table T1 
WHERE T1.Val = 'abc' 
AND NOT EXISTS (SELECT * FROM Table T2 WHERE T2.ID = T1.ID AND T2.Value != 'abc') 
+0

なぜ2つのテーブルを使用しましたか? 2つの表のデータには言及していません。 – ash12

+1

同じテーブル(テーブル)が結合されています。それはトリックです。単に試してみてください。 –

+1

素敵なapporach..Thisは受け入れられた答えでなければなりません:) – ash12

2

私はシンプルgroup byhavingでこれを行うだろう:

select id 
from t 
group by id 
having min(val) = max(val) and min(val) = 'abc'; 

これは私の最も簡単な方法のように思えます。