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的!

posted @   侯小厨  阅读(34059)  评论(2编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战
Fork me on Gitee
点击右上角即可分享
微信分享提示