我目前有一个SQL查询,作为一些JOINS的结果,返回一个类似于以下内容的表:
--------------------------------------
| id | name | desc | id2 |
--------------------------------------
| 1 | aaaaaaaa | first thing | 2 |
| 1 | aaaaaaaa | first thing | 4 |
| 1 | aaaaaaaa | first thing | 5 |
| 2 | bbbbbbbb | second | 3 |
| 2 | bbbbbbbb | second | 5 |
--------------------------------------
从这个查询结果中,我试图找到所有行的id字段,其中id2<> 4;但是,如果其中一行失败,我不希望返回任何一行(即对于id2<> 4,我只想要“2”;对于id2<> 5,我想要没有结果;对于id2<> 1,我想要“1”和“2”)。只需做WHERE id2<> 2仍然会给我id = 1的其他匹配,我不完全确定如何去做。
答案 0 :(得分:1)
如果您想要原始数据中的所有行,请使用not exists
:
select t.*
from t
where not exists (select 1 from t t2 where t2.id = t.id and t2.id2 = 4);
如果您只想要不具有4的id
,我建议group by
和having
:
select t.id
from t
group by t.id
having sum(t.id2 = 4) = 0;