MySQL - or and 记录

最近写 sql,or 跟 and 一起使用是会有坑的,特此记录一下

首先来看看事例数据
在这里插入图片描述
图中共有14条数据
大概可以看出,lx=‘1’ 的有10条数据,lx=‘2’ 的有4条数据

查找 lx=‘1’,zt=‘4’ 的数据
在这里插入图片描述
查出有 9 条数据是 zt=‘4’,换句话说有 1 条数据是 zt=‘0’ 的,可以通过第一张图确认一下。

好了,坑开始来了。

正常逻辑下,我们一般是要查找 lx=‘1’ 并且 zt=‘4’ 或者 zt=‘0’ 的,可能有时候一不注意,就出问题了。

-- 查找 lx='1' 并且 zt='4' 或者 zt='0' ??
SELECT lx,zt FROM log_yjxx WHERE lx = '1' AND zt = '4' OR zt = '0'

咋一看,这条 sql 好像没有错,但是看看结果

在这里插入图片描述
把 zt=‘0’ 都查出来了,所以 9 条 zt=‘4’ 加上 5条 zt=‘0’ 的就 14 条数据。

数据例子可能不好,应该修改一两个 zt 等于其它的。

-- 但实际上,这条 sql 的意思是:
-- 查找 lx='1' 且 zt='4' 的集合,又或者是 zt='0'的数据
SELECT lx,zt FROM log_yjxx WHERE lx = '1' AND zt = '4' OR zt = '0'

而我们实际要查找的集合是,在 lx=‘1’ 的前提下,zt=‘0’ 或者 zt=‘4’ 的数据,所以 zt 这里要加个小括号,就没有问题了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值