Das liegt an der Art NOT IN
funktioniert. Wenn einer der Werte in der Liste NULL ist, werden keine Ergebnisse zurückgegeben. z. B.
SELECT [TestColumn] = 3
WHERE 3 NOT IN (1, 2, NULL)
Gibt keine Ergebnisse zurück und nicht 3.
Wenn Sie das Beispiel in die äquivalente ODER-Anweisung erweitern, werden Sie sehen, warum:
WHERE 3 != 1
AND 3 != 2
AND 3 != NULL
Seit 3 != NULL
Wird als falsch ausgewertet, da nichts gleich NULL ist, gibt die Anweisung falsch zurück.
Sie können das gewünschte Ergebnis auf 3 Arten erzielen.
1) Verwenden Sie ELSE
in Ihrem Fall Anweisung, um sicherzustellen, dass kein NULL
vorhanden ist Ergebnisse
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)
2) Ändern Sie IN
auf ungleich, da Ihre Case-Anweisung sowieso nur 1 Wert zurückgibt
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)
3) Überarbeiten Sie Ihre Logik, dies kann umgeschrieben werden als
SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Product = 'product_1' AND Client = 'Client_a')