如果一个失败WHERE子句SQL选择不行

时间:2017-04-16 01:37:21

标签: mysql sql select

我目前有一个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的其他匹配,我不完全确定如何去做。

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 byhaving

select t.id
from t
group by t.id
having sum(t.id2 = 4) = 0;