Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Mauvaise sortie dans la requête FULL OUTER JOIN

D'après ce que vous avez dit dans la section des commentaires, je pense que vous devez modifier un extrait de code...

  • Ce que je veux, c'est que cette carte n'ait pas de field14 comme 'Test card'


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

=>

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


Construisez une table logique pour vérifier si vous voulez vraiment AND ou si vous voulez 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


MODIFIER Suivre pour commenter

Utiliser OR dans le code ci-dessus ne peut pas donner TRUE quand Field14 est 'Test card' . Les deux tests donnent FALSE et donc le résultat doit être FALSE .

Vous devez décomposer les choses par étapes. Le débogage doit être effectué en testant des pièces à la fois et en prouvant progressivement ce qui fonctionne pour isoler ce qui ne fonctionne pas. N'essayez jamais de tout trier d'un coup, approchez-vous méthodiquement.

Exécutez ce test...

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