2025年MySQL - 条件查询中 AND 与 OR 联合使用

MySQL - 条件查询中 AND 与 OR 联合使用MySql 查询中经常会用到 AND 与 OR 一起使用的情况 可如果写法不对 往往会起到相反的效果 这不 前几天就碰到了 最后测试果然提了一堆 bug 1 当 mysql 的 WHERE 语句中出现 AND OR 时 AND 要么全部放在 OR 的前面 放在 OR 之后的 AND 条件将不会起作用

大家好,我是讯享网,很高兴认识大家。

MySql查询中经常会用到AND与OR一起使用的情况,可如果写法不对,往往会起到相反的效果,这不,前几天就碰到了,最后测试果然提了一堆bug~

 

1、当mysql的WHERE语句中出现AND、OR时,AND 要么全部放在 OR 的前面,放在OR之后的AND条件将不会起作用,参考sql

SELECT e.total_amount FROM cmo_expense_account e WHERE e.project_id='236aec01d88e48cdaaee357a870d18b5' AND e.ea_type =1 OR (e.project_id in (select t1.id from pm_project t1 where t1.parent_id='236aec01d88e48cdaaee357a870d18b5')) and e.total_amount>300

讯享网
  • 当然,结果肯定是200的也会出现,如果你把 AND e.ea_type =1再放到后面,naer_type=2的也就出现了

 

2、如果你怕出错,可以使用union all写法。将and与or分开,这样就不会存在问题了,就是比较麻烦

讯享网select sum(t3.total_amount) from ( SELECT e.total_amount FROM cmo_expense_account e WHERE e.project_id='236aec01d88e48cdaaee357a870d18b5' AND e.ea_type =1 union ALL SELECT e.total_amount FROM cmo_expense_account e WHERE e.project_id in (select t1.id from pm_project t1 where t1.parent_id='236aec01d88e48cdaaee357a870d18b5') AND e.ea_type =1) t3

 


讯享网

3、如果你坚持需要将AND放在OR之后,那么,OR的两边应该用()括起来和AND并列。比如下面这个:

SELECT * from student WHERE id = 1 or id = 2 AND age = 20;

查询出 id 是 1 或者 2 并且年龄是 20 的,那么很明显结果:

上面查询出来的是id=1的或者id为2并且年龄20的,如果想取唯一的并集,那么就需要这么写

讯享网SELECT * from student WHERE (id = 1 or id = 2 ) AND age = 20;

这样查出来的才是id为1或者2的并且年龄一定是20的!

小讯
上一篇 2025-02-24 21:45
下一篇 2025-01-05 22:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63033.html