mysql条件查询中AND与OR联合使用的注意事项!
2018-11-08 11:14
381 查看
存储过程写的太长了 五六百行,也不报错 结果是错的 反复排查 发现是一个OR错写成了AND 坑啊!
mysql条件查询中AND与OR联合使用的注意事项!
mysql查询中经常会用到AND与OR一起使用的情况,可如果写法不对,往往会起到相反的效果,这不,前几天就碰到了,最后测试果然提了一堆bug!!!!
废话就不多说了,主要总结一下几点:
一 当mysql的WHERE语句中出现AND OR时,AND 要么全部放在 OR的前面,放在OR之后的and条件将不会起作用,参考sql:
1 2 3 4 5 6 7 8 9 |
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的也就出现了,
二 如果你怕出错,可以使用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
三 如果你坚持需要将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的!
阅读更多相关文章推荐
- IN 函数 和 and 在where条件中联合使用的注意事项:
- mybatis example 使用AND 和OR 联合查询
- 时间类型数据使用between ...and ..语句条件查询时应注意的问题
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- mysql union all 中使用 含order by子查询 注意事项
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- Laravel复杂的'OR'与'AND'条件联合查询
- mysql where 条件语句中的OR和AND的用法注意!
- mybatis 使用 and和or联合查询
- mysql union all 中使用 含order by子查询 注意事项
- 联合两个索引查询,已解决: 还有个进行多条件搜索 and 与 or 的操作
- mybatis 使用 and和or联合查询
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- MySQL/Mybatis多个AND和OR混用注意事项
- asp的SQL语句中and和or同时使用的注意事项
- 使用Navicat for Mysql执行sql查询文件注意事项
- mysql同时用and和or关联查询条件,并且值包含null所遇到的坑
- 关于 mysql 在联合查询时,使用 concat 拼接查询条件
- DB2数据库中SQL语句中使用or和and的关键字的时候注意事项
- 条件语句“&&”和“||”的使用注意事项