mysql的or能去重吗_mysql条件查询中AND与OR联合使用的注意事项!

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

废话就不多说了,主要总结一下几点:

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

SELECT

e.total_amount

FROM

cmo_expense_account e

WHERE

e.project_id='236aec01d88e48cdaaee357a870d18b5'

ANDe.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(SELECTe.total_amountFROMcmo_expense_account eWHERE e.project_id='236aec01d88e48cdaaee357a870d18b5'

AND e.ea_type =1

union ALL

SELECTe.total_amountFROMcmo_expense_account eWHERE 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的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值