SQL 条件过滤器

SQL conditional filter

我有以下格式的数据:

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。 有什么想法吗? 请帮忙!!

我会简单地计算子查询中满足此特定条件的行数。

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')

我会用简单的 group byhaving:

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

这对我来说似乎是最简单的方法。