Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Falsche Ausgabe in der FULL OUTER JOIN-Abfrage

Basierend auf dem, was Sie in den Kommentaren gesagt haben, denke ich, dass Sie ein Code-Snippet ändern müssen ...

  • Ich möchte, dass die Karte field14 nicht haben sollte als 'Test card'


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

=>

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


Erstellen Sie eine Logiktabelle, um zu prüfen, ob Sie wirklich AND wollen oder wenn Sie wollen 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


BEARBEITEN Folge zum Kommentieren

Mit OR im obigen Code kann nicht TRUE ergeben wenn Field14 ist 'Test card' . Beide Tests ergeben FALSE und daher muss das Ergebnis FALSE sein .

Sie müssen die Dinge in Etappen aufteilen. Das Debuggen sollte durchgeführt werden, indem Stück für Stück getestet und schrittweise nachgewiesen wird, was funktioniert, um zu isolieren, was nicht funktioniert. Versuchen Sie nie, alles auf einmal zu regeln, gehen Sie methodisch an die Sache heran.

Führen Sie diesen Test aus...

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