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失效的原因。
Published 11 July 2006 12:04 PM 由 Jeffrey
Filed under: ,


意見

# YST said on 14 April, 2007 09:57 AM

我今天也是碰到這個問題

最後我是改成使用 not exists 就可以正確顯示

原來是 null 作祟

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 

請輸入以上的數字:

搜尋

Go

<July 2006>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
【工商服務】


BlogLook Score and Rank

Syndication