您好,登錄后才能下訂單哦!
這篇文章主要講解了“mysql中not in隱含陷阱是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql中not in隱含陷阱是什么”吧!
SELECT * FROM `users` WHERE id NOT IN ( SELECT uid FROM role_user )
查詢結果為:
當然不對
SELECT uid FROM role_user
查詢結果為:
SELECT * FROM `users`
role_user
表的數據uid只有一個1和null,所以說應該能查詢到users
表的id=2的數據
實際執行的sql為:
SELECT * FROM `users` WHERE id NOT IN ( 1,null )
但是查詢的結果依然為:
如果我把sql改一下:
SELECT * FROM `users` WHERE id NOT IN ( 1)
所以可以看到是由于not in
中的結果有null
導致無法查詢出數據的
SELECT * FROM `users` WHERE id NOT IN ( 1,null )
not in 多個值的實現原理為
SELECT * FROM `users` WHERE id != 1 and id != null
第一反應是不是覺得是符合的啊?users
表的id是主鍵,所以說都不為空值啊
但是為什么會這樣?
我們來執行一個sql
select 1 !=null
可以看到查詢結果為Null,所以說上面的sql里面的id!=null
的結果也是null
由于Null無法參與boolean運算,默認為false,所以說上面的條件中and后面的id!=null永遠是false
感謝各位的閱讀,以上就是“mysql中not in隱含陷阱是什么”的內容了,經過本文的學習后,相信大家對mysql中not in隱含陷阱是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。