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

FULL OUTER JOIN クエリの間違った出力

    コメント セクションでの発言に基づいて、コードの 1 つのスニペットを変更する必要があると思います...

    • カードに field14 を含めないでほしい as 'Test card'


    (t1.field14 <> 'Test Card' and t1.field14 is null)
    

    =>

    (t1.field14 <> 'Test Card'  OR  t1.field14 is null)
    


    本当に AND が必要かどうかを確認する論理テーブルを作成します または OR が必要な場合

    field14     | (field14 <> 'Test Card') | (t1.field14 is null) | A OR B | A AND B
    --------------------------------------------------------------------------------
    'Test Card' |            FALSE         |        FALSE         | FALSE  | FALSE
    NULL        |            NULL          |        TRUE          | TRUE   | FALSE
    'Any Card'  |            TRUE          |        FALSE         | TRUE   | FALSE
    


    編集 フォローアップしてコメント

    OR の使用 上記のコードでは TRUE を生成できません Field14 の場合 'Test Card' です .どちらのテストでも FALSE が返されます したがって、結果は FALSE でなければなりません .

    物事を段階的に分解する必要があります。デバッグは、一度にいくつかの部分をテストし、機能しないものを分離するために機能することを徐々に証明することによって行う必要があります。一度にすべてを整理しようとせず、整然と物事に取り組みます。

    このテストを実行...

    SELECT
      *,
      CASE WHEN field14 <> 'Test Card'                     THEN 1 ELSE 0 END     Test1,
      CASE WHEN field14 IS NULL                            THEN 1 ELSE 0 END     Test2,
      CASE WHEN field14 <> 'Test Card' OR  field14 IS NULL THEN 1 ELSE 0 END     1_OR_2,
      CASE WHEN field14 <> 'Test Card' AND field14 IS NULL THEN 1 ELSE 0 END     1_AND_2
    FROM
      tblCustomer
    



    1. Python から呼び出されたときに SQL ストアド プロシージャが終了しない

    2. パスワードスクリプトを忘れたPHPmysqliデータベース

    3. 現実的なテストデータをTeradataに入力するDeNovo

    4. MySQLBlobフィールドから一部を選択します