今天使用 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