2013-02-14 73 views
6

我認爲NOT IN在查詢中的行爲與!=相同。但是,使用!=查詢比使用NOT IN查詢返回的行:NOT IN和NOT EQUALS在SQL查詢中的不同行爲差異

SELECT count(A.NO) 
FROM A 
WHERE 
A.CODE != 'a' 
AND 
A.CODE != 'b' 
AND 
A.CODE != 'c' 
AND 
A.NAME != 'd' 
AND 
A.NAME != 'e' 

返回1566行,而

SELECT count(A.NO) 
FROM A 
WHERE 
A.CODE NOT IN ('a','b','c') 
AND 
A.NAME NOT IN ('d','e') 

只返回1200行。

我想NOT IN不包括NULL的值 - 這是唯一的區別嗎?

+2

你可以爲我們提供一些演示數據 – Akash 2013-02-14 02:09:13

+2

如果A.CODE或A.NAME有一個NULL值,其在太忽略WHERE子句 – Akash 2013-02-14 02:10:58

+2

回答這個問題最簡單的方法,就是打印出來的366在第一個查詢中但不在第二個查詢中的行。查看A.CODE和A.NAME的值。 – byteherder 2013-02-14 02:21:16

回答

2

我試圖使用this簡化的SQL小提琴來補救問題,但是,它會爲兩個版本返回相同的編號。

你的數據有什麼不同?

+0

我猜測查詢稍有不同 - 在傳遞給count()函數的列中很可能不同。 – 2013-05-07 15:29:16

0

沒有答案,但提供以下內容?

SELECT * 
FROM A 
WHERE 
A.CODE != 'a' 
AND 
A.CODE != 'b' 
AND 
A.CODE != 'c' 
AND 
A.NAME != 'd' 
AND 
A.NAME != 'e' 
AND NOT (
    A.CODE NOT IN ('a','b','c') 
    AND 
    A.NAME NOT IN ('d','e') 
) 
LIMIT 0, 20