我当前有一个 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 |
--------------------------------------
从这个查询结果中,我试图找到 id2 <> 4; 的所有行的 id 字段。但是,如果其中一行失败,我不希望返回任何行(即,对于 id2 <> 4,我只想要“2”;对于 id2 <> 5,我不想要任何结果;对于 id2 < > 1,我想要“1”和“2”)。简单地执行 WHERE id2 <> 2 仍然会给我 id=1 的其他匹配项,但我不完全确定如何去做。
最佳答案
如果您想要原始数据中的所有行,请使用不存在
:
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;
关于mysql - 如果 WHERE 子句失败,SQL 将不选择任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432864/