mysql字段数据为null时反查询不到的解决方案
admin
2022-06-17 10:26
短信预约 -IT技能 免费直播动态提醒
当我们通过 mysql 使用 NOT IN 查询时,如果条件字段可以为 NULL 并且值为NULL需要特别注意一下这个时候使用 NOT IN 查询时是查询不到的。
测试NULL时反查询不到例子
假如我们现在有一个表 user
id | nickname |
---|---|
1 | 张三 |
2 | 李四 |
3 | NULL |
4 | 王五 |
现在我们查询用户名不是 张三 和 李四 的用户
select * from users where user_name not in ('张三','李四');
这个时候我们应该得到的是两条数据
id | nickname |
---|---|
3 | NULL |
4 | 王五 |
但是结果却只有一条数据
id | nickname |
---|---|
4 | 王五 |
分析测试NULL时反查询不到问题
这是因为 mysql 中 not in 使用的是 不相等(!=) 比较,即每条记录的 user_name 都和 张三, 李四 进行数据比较。
foreach ($user_names as $user_name) {
if ($user_name != '张三' && $user_name != '李四') {
return true; // 符合条件
} else {
return false; //不符合条件
}
}
mysql问题解决方案
mysql 中 NULL 的判断只能用 IS NUL 和 IS NOT NULL 判断, NULL != 任意值 都返回 false 所有 id = 3 的记录不符合条件。
在使用 mysql 设计表字段时候我们应该避免允许 NULL 的存在,在设置字段时使用 NOT NULL 不允许存在 NULL
`createtime` INT UNSIGNED NOT NULL DEFAULT '0' COMMENT '创建时间',
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341