SQL条件过滤器

时间:2017-01-28 00:14:25

标签: sql postgresql filter subquery conditional

我的数据格式如下:

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

现在,我希望ID不具有除'abc'之外的任何其他值。这意味着我只需要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 个答案:

答案 0 :(得分: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')

答案 1 :(得分:2)

我会使用简单的group byhaving

执行此操作
select id
from t
group by id
having min(val) = max(val) and min(val) = 'abc';

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