mysql里使用not in查出来的结果不一致的原因

举例:
学校招生
good_name表 为特招名单,
stu_score表为此次考试成绩.
录取分数大于80且不在特招名单的人.
数据如下:

SELECT * FROM good_name

在这里插入图片描述

SELECT * FROM stu_score

在这里插入图片描述
按要求用not in的话是这么写

SELECT name FROM stu_score
where name not in (SELECT name FROM good_name) and score > 80

在这里插入图片描述
结果却不是我们想要的
单独查子查询看看数据

SELECT name FROM good_name

在这里插入图片描述

数据能正常访问。

而问题在这个 not in 和 null上。
原sql可以解析为
SELECT name FROM stu_score

where not  (name =‘张三’ or name='李四' or name=null) and score > 80

当name 为王五的时候 代入

SELECT name FROM stu_score
where not  (false or false or null) and score > 80 


由于 false or null = null null 取反也是null

SELECT name FROM stu_score
where  null and score > 80

所以查出无记录

所以遇到这个问题 可以用 NOT EXISTS

SELECT name FROM stu_score
WHERE NOT EXISTS (SELECT 1 FROM good_name WHERE good_name.name=stu_score.name) AND score > 80

在这里插入图片描述
这样就可以解决这个问题了

猜你喜欢

转载自blog.csdn.net/weixin_43778491/article/details/106529145