SQL_SERVER中不建議用NOT IN 和IN 的替代方案

在SQL Server中,子查詢可以分爲相關子查詢和無關子查詢,對於無關子查詢來說,Not In子句比較常見,但Not In潛在會帶來下面兩種問題:
1.結果不準確2.查詢性能低下
一、
在SQL Server中,Null值並不是一個值,而是表示特定含義,其所表示的含義是“Unknow”,可以理解爲未定義或者未知,因此任何與Null值進行比對的二元操作符結果一定爲Null,包括Null值本身。而在SQL Server中,Null值的含義轉換爲Bool類型的結果爲False。
解決:
解決辦法就是不使用Not In,而使用Not Exists作爲替代。Exists的操作符不會返回Null,只會根據子查詢中的每一行決定返回True或者False,當遇到Null值時,只會返回False,而不會由某個Null值導致整個子查詢表達式爲Null。

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