mysql⾥使⽤notin查出来的结果不⼀致的原因
举例:
学校招⽣
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 为王五的时候 代⼊mysql下载不了什么原因
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这样就可以解决这个问题了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论