MySQL not in查詢不出數據(MySQL not in 無效)

原文鏈接:https://blog.csdn.net/u013913942/article/details/80504100

今天使用 MySQL 的 not in 進行查詢的時候,發現結果裏面並沒有返回任何數據。SQL 語句沒有任何問題,但是結果集卻是空,實在無法理解。糾結了半天,最後使用 left join,兩表關聯,找到了目標數據。但是這樣的話,難道 not in 就不能使用了嗎?最後經過查找,找到了原因。

mysql 的 not in 中,不能包含 null 值。否則,將會返回空結果集。

對於 not in 來說,如果子查詢中包含 null 值的話,那麼,它將會翻譯爲 not in null。除了 null 以外的所有數據,都滿足這一點。所以,就會出現 not in “失效”的情況。

例如:我有兩張表,t_b_handle 和 t_b_detail,兩張表爲一一對應關係,兩張表通過 t_b_handle 表中的 detail_id 關聯。現有查詢語句如下:

錯誤 SQL:

select * from t_b_detail where id not in (

    select detail_id from t_b_handle

)

那麼,如果 t_b_handle 表中的 detail_id 存在 null 值,那麼這個 SQL 語句就是錯誤的。返回的結果集就是空的。

如果出現了這個問題,明明應該有數據,而使用 not in 卻返回了空集,那麼我們可以使用下面的 SQL 來避免這種情況的發生:

正確 SQL:

select * from t_b_detail where id not in (

    select detail_id from t_b_handle where detail_id is not null

)

這樣即可解決此問題。
————————————————
版權聲明:本文爲CSDN博主「saichaoZhang」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013913942/article/details/80504100

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