MySQL not in查詢不出資料
阿新 • • 發佈:2021-10-21
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
)