hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

7/11/2006

KB-詭異的NOT IN


今天被一個詭異的SQL查詢結果搞到昏頭,查兩個TABLE
SELECT * FROM A WHERE ID=123 à 有資料
SELECT * FROM B WHERE ID=123 à 沒資料
由以上結果,推測
SELECT * FROM A WHERE ID NOT IN (SELECT ID FROM B)
該至少有一筆資料才對吧?
 
 
答案是不一定!!
若Table B中有部分資料的ID欄位為NULL,則第三個NOT IN查詢的結果將會是空值。
 
NULL被用來比較時,其結果是很特別的。例如: 以下有五個測試
SELECT 'YES' WHERE 1=null
SELECT 'YES' WHERE 1<>null
SELECT 'YES' WHERE null=null
SELECT 'YES' WHERE null<>null
SELECT 'YES' WHERE null is null
以上五個查詢條件,只有最後一項會為true,這解釋了NOT IN失效的原因。

0 Comments:

Post a Comment

<< Home