これは NOT IN
の方法によるものです 動作します。リスト内のいずれかの値が NULL の場合、結果は返されません。例
SELECT [TestColumn] = 3
WHERE 3 NOT IN (1, 2, NULL)
3 ではなく、結果を返しません。
この例を同等の OR ステートメントに展開すると、その理由がわかります:
WHERE 3 != 1
AND 3 != 2
AND 3 != NULL
3 != NULL
以降 ステートメントが false を返す NULL に等しいものはないため、false と評価されます。
3 つの方法で必要な結果を達成できます。
1) ELSE
を使用する あなたのケースステートメントで NULL
がないことを確認してください 結果
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product ELSE '' END)
2) IN
を変更します caseステートメントはとにかく1つの値しか返さないため、等しくない
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Product != (CASE WHEN client = 'client_a' and product = 'product_1' THEN Product END)
3) ロジックを修正します。これは次のように書き換えることができます
SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Product = 'product_1' AND Client = 'Client_a')