1

WHERE最初は、クエリの句でCASE(以下を参照)を使用してこれを達成できると思いましたが、必要な結果を得るのに問題があります。このクエリは、データベース内のクライアントの製品情報を取得するためのものです。特定の製品が特定のクライアントによって注文された場合、行を返す必要はまったくありません。問題は、製品を削除すると、どのクライアントもこの製品を注文できるため、その製品を使用している他のクライアントが表示されることです。私はこれを達成する方法に困惑しています。

Select
   OrderNumber, Client, Product From Orders
WHERE
  Product not in(CASE WHEN client = 'client_a' and product = 'product_1' THEN Product   END)

結果としてこのようなものが表示されることを期待して、client_aを除くすべてのクライアントに対してproduct_1を表示することが重要です。

ordernumber client          product
123         client a    product 2
456         client b    product 1
789         client b    product 2
4

4 に答える 4

2

私はあなたが非常に単純な何かを複雑にしすぎていると思います、あなたはただ望んでいません:

SELECT
   OrderNumber, Client, Product 
FROM Orders
WHERE Product != 'product_1' 
  AND client = 'client_a'
于 2013-01-16T17:38:36.100 に答える
2

これは、NOT IN動作方法によるものです。リスト内の値のいずれかがNULLの場合、結果は返されません。例えば

SELECT  [TestColumn] = 3
WHERE   3 NOT IN (1, 2, NULL)

結果は返されず、3も返されません。

例を同等のORステートメントに展開すると、次の理由がわかります。

WHERE   3 != 1
AND     3 != 2
AND     3 != NULL

NULLに等しいものはないため、falseと評価されるため3 != NULL、ステートメントはfalseを返します。

あなたは3つの方法で必要な結果を達成することができます。

1)結果ELSEがないことを確認するためにcaseステートメントで使用します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)INcaseステートメントはとにかく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')
于 2013-01-16T17:39:20.997 に答える
1
SELECT OrderNumber, Client, Product
FROM Orders
WHERE Client <> 'client_a' OR Product <> 'product_1'

または、意味的に同等であり、これが機能する理由を理解するのが少し簡単かもしれません。

SELECT OrderNumber, Client, Product
FROM Orders
WHERE NOT (Client = 'client_a' AND Product = 'product_1')
于 2013-01-16T17:35:30.313 に答える
1

これを試して :

SELECT OrderNumber, Client, Product
FROM Orders
WHERE Client != 'client_a' 
OR Product != 'product_1'
;
于 2013-01-16T17:37:23.057 に答える