2013-02-14 9 views
6

Myślałem, że NOT IN zachowuje się tak samo jak != w zapytaniu. Ale zapytania przy użyciu != zwraca więcej wierszy niż kwerendy przy użyciu NOT IN:Różnica między NOT IN a NOT EQUALS inne zachowanie w zapytaniu 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' 

powroty 1566 wierszy, natomiast

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

zwraca tylko 1200 wierszy.

Przypuszczam, że NOT IN wyklucza wartości NULL - czy to byłaby jedyna różnica?

+2

można dostarczyć nam pewnych danych demonstracyjnych – Akash

+2

Jeśli A.CODE lub A.NAME ma wartość NULL, jego zbyt ignorowane w klauzuli WHERE – Akash

+2

Najprostszym sposobem, aby odpowiedzieć na pytanie, czy aby wydrukować 366 wiersze, które są w pierwszym zapytaniu, ale nie w drugim. Sprawdź wartości dla A.CODE i A.NAME. – byteherder

Odpowiedz

2

Próbowałem zreplikować problem przy użyciu uproszczonego skrzypca SQL this, jednak zwraca on tę samą liczbę dla obu wersji.

Czym różnią się twoje dane?

+0

Zgaduję, że zapytania były nieco inne - najprawdopodobniej różne w kolumnie przekazanej do funkcji 'count()'. –

0

Brak odpowiedzi, ale co zapewnia poniższe?

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 
Powiązane problemy