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

在這裏插入圖片描述
這樣就可以解決這個問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章