not in 和not exists坑 得到的數據不一致

not in 想變成 not exists,發現語義相等了,但是還是得到的數據不一致,在處理null時就出現意外了。

SELECT * from CW_HP_SKR
where khh not in (select yhmc from CW_PJDATA_FKH);
SELECT * from CW_HP_SKR a
WHERE 
NOT EXISTS (SELECT b.* FROM CW_PJDATA_FKH b WHERE b.yhmc = a.khh )

現象

在這裏插入圖片描述
在這裏插入圖片描述

原因

是因爲子查詢中的表CW_PJDATA_FKHyhmc存在空null值,以及主表CW_HP_SKRkhh存在null值,如果在not in子查詢中有null值的時候,則不會返回數據 相當於 ‘231’=null 不返回數據

修改

SELECT * from CW_HP_SKR
where khh IS NULL OR khh not in (select yhmc from CW_PJDATA_FKH WHERE YHMC IS NOT NULL);

結果:但是會發現速度很慢在這裏插入圖片描述

結論

最好控制本案例中的yhmckhh中的值都不爲空,或者使用not exists 關聯

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