Dit komt door de manier waarop NOT IN
werken. Als een van de waarden in de lijst NULL is, worden er geen resultaten geretourneerd. bijv.
SELECT [TestColumn] = 3
WHERE 3 NOT IN (1, 2, NULL)
Geeft geen resultaten, en niet 3.
Als u het voorbeeld uitbreidt tot de equivalente OR-instructie, zult u zien waarom:
WHERE 3 != 1
AND 3 != 2
AND 3 != NULL
Sinds 3 != NULL
Evalueert naar false omdat niets gelijk is aan NULL, de instructie retourneert false.
U kunt het gewenste resultaat op 3 manieren bereiken.
1) Gebruik ELSE
in uw case-statement om ervoor te zorgen dat er geen NULL
. is resultaten
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)
2) Verander IN
niet gelijk zijn aan, aangezien uw case-statement sowieso maar 1 waarde retourneert
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)
3) Herzie je logica, dit kan worden herschreven als
SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Product = 'product_1' AND Client = 'Client_a')