1. 程式人生 > 其它 >MySQL not in查詢不出資料

MySQL 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

)