mysql - 如果 WHERE 子句失败,SQL 将不选择任何行

标签 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  |
 --------------------------------------

从这个查询结果中,我试图找到 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 byhaving:

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/

相关文章:

mysql - 批量上传到 AWS 上托管的 MySQL 时出错

PHP Fetchall 只返回列标题

mysql - 在mysql中使用表达式获取最后插入的ID

.net - javascript 和 SQL 之间的共享规则

PHP MySQL 将来自不同行的具有相同值的单元格组合在一起

mysql - 根据按两个文本列排序的 SQL 获取下一行和上一行

MySQL 聚合报告

php - mysql - Where 子句中的未知列

vb.net - 在sqlite中如何从日期时间中选择?

javascript - 如何使用 onchange 事件调用函数将元素添加到数组中?