sql >> データベース >  >> RDS >> Sqlserver

SQL - 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
    

    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')
    


    1. SSISとMySQL-テーブル名の区切り文字の問題

    2. ORA-00942:表またはビューが存在しません...詳細を取得できますか?

    3. doctrine2とgroup_concat

    4. 内部結合からmysqlテーブルを作成する