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 by
和 having
:
select id
from t
group by id
having min(val) = max(val) and min(val) = 'abc';
这对我来说似乎是最简单的方法。
我有以下格式的数据:
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 by
和 having
:
select id
from t
group by id
having min(val) = max(val) and min(val) = 'abc';
这对我来说似乎是最简单的方法。