我也曾遇到过类似的问题,但并不能完全满足我的需要。可以说我有一张桌子。
+-----+-------+
| ID | Value |
+-----+-------+
| 123 | 1 |
| 123 | 2 |
| 123 | 3 |
| 456 | 1 |
| 456 | 2 |
| 456 | 4 |
| 789 | 1 |
| 789 | 2 |
+-----+-------+
我想返回DISTINCT ID,但排除具有特定值的ID。例如,假设我不希望任何ID的值为3。我的结果应该是这样。
+-----+
| ID |
+-----+
| 456 |
| 789 |
+-----+
我希望这是有道理的。如果需要更多信息,请询问,如果已经回答,请给我指明正确的方向。谢谢。
答案 0 :(得分:2)
您可以使用group by
和having
:
select id
from t
group by id
having sum(case when value = 3 then 1 else 0 end) = 0;
having
子句为每个id计算“ 3”的数量。 = 0
仅返回计数为0(即不存在“ 3”)的组。
答案 1 :(得分:1)
您可以使用not exists
:
select distinct t.id
from table t
where not exists (select 1 from table t1 where t1.id = t.id and t1.value = 3);
答案 2 :(得分:1)
尝试一下:
select id from tablename
group by id
having (case when value=3 then 1 else 0 end)=0
答案 3 :(得分:0)
您还可以使用EXCEPT比较以下两个数据集,以得出所需的结果集
select distinct Id from ValuesTbl
except
select Id from ValuesTbl where Value = 3