2013-02-14 6 views
6

NOT INはクエリで!=と同じ動作をすると思いました。しかし!=を使用してクエリがNOT INを使用してクエリよりも多くの行を返す:SQLのクエリでNOT INとNOT EQUALSの違いが異なる

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

A.CODEまたはA.NAMEがNULL値を持っている場合は、その句 – Akash

+2

を私たちに提供することができます最初のクエリではなく2番目のクエリにある行。 A.CODEとA.NAMEの値を見てください。 – Akash

+2

質問に答えるための最も簡単な方法は、366をプリントアウトすることであるWHEREであまりにも無視し、いくつかのデモデータ – byteherder

答えて

2

簡略化されたSQLフィドルthisを使用して問題を再現しようとしましたが、両方のバージョンで同じ番号が返されます。

データの違いは何ですか?

+0

私はクエリが少し異なっていると思っています - おそらく 'count()'関数に渡された列の中で異なっています。 –

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 
関連する問題