Mysql的and用法和&位运算混合使用

 故事的开始:

需求:

已知:client_type中,1.ios,2.android 3、ios和android

在app_version_info表中,查询产品product_id=1,并且客户端为ios的。也就是client_type=1 or client_type=3的。

下面是一个错误的栗子:

导致的结果:查询出所有client_type=1 或者 client_type=3的所有商户。

原因分析:and 比 or具有更高的优先级,所以不加括号他就从左到右开始判断。

SELECT
	*
FROM
	app_version_info AS a
WHERE
	a.del_flag = 0
AND a.product_id = 1
AND a.client_type = 1
OR a.client_type = 3
ORDER BY
	a.update_date DESC

 将上面的栗子纠错,正确的栗子如下:

给and后面的or运算标标个括号。eg:and (A条件 or B条件)

SELECT
	*
FROM
	app_version_info AS a
WHERE
	a.del_flag = 0
AND a.product_id = 1
AND (a.client_type = 1 OR a.client_type = 3)
ORDER BY
	a.update_date DESC

拓展知识:

为达到需求要的效果,我们有两种方法:

1、根据mybatis-plus,我可以根据客户端传入的client_type=1查出1和3的内容,客户端传入client_type=2查出2和3的内容。像下面这样:

SELECT
        *
FROM
        app_version_info AS a
WHERE
        a.del_flag = 0
AND a.product_id = 1
AND ( a.client_type = #{clientType} OR a.client_type = 3 )
ORDER BY
        a.update_date DESC

 2、通过位运算。2&2=2,3&2=2.通过client_type&2=2我们就可以得到client_type=2或3的类型。1&1=1,3&1=1.同理可得。像下面这样:

SELECT
	*
FROM
	app_version_info AS a
WHERE
	a.del_flag = 0
AND a.product_id = 1
AND a.client_type & #{clientType}= #{clientType}
ORDER BY
	a.update_date DESC

 关于位运算,可以参考这篇文章:一种经典位运算的规则

欢迎加入 CSDN技术交流群:(点击即可加群)QQ群:681223095。

因经常有人留言,未能及时查看到和回复,所以特建此群,以方便交流。方便问题讨论,有问题和没有问题的小伙伴均可加入,用作自我学习和共同进步。本博主不一定长期在线,但是qq群里会有很多热心的小伙伴,大家一起讨论解决问题。
右边的二维码是公众号。关注公众号,更多学习内容给予推送,争取每日更新

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值