mysql 中的and和or

最近项目中用到了比较复杂的查询,于是写了个sql:select * from table a where status= '1' or (status = '2' and sub_status in('a','b')) and shop = 1;需求是需要查询给定的店铺1中状态是1或者状态是2时子状态在a或者b的数据。这里涉及到一个sql语句中and和or的优先级问题,如上的查询当 status = 1时无论shop是否是1都将被查询出来,原因是and优先级大于or,那语句在执行时先判断and条件再or导致只要前条件满足后shop=1 无效,解决方案:凡事使用or的语句都需要用括号来消除歧义。上面的语句可以改为:

select * from table a where shop = 1 and (status= '1' or (status = '2' and sub_status in('a','b')))  这样就可以达到期望查询结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值