Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Output errato nella query FULL OUTER JOIN

Sulla base di ciò che hai detto nella sezione commenti, penso che tu debba cambiare uno snippet di codice...

  • Quello che voglio è che la carta non debba avere field14 come 'Test card'


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

=>

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


Costruisci una tabella logica per verificare se vuoi veramente AND o se vuoi 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


MODIFICA Continua per commentare

Usando OR nel codice sopra non può restituire TRUE quando Field14 è 'Test Card' . Entrambi i test producono FALSE e quindi il risultato deve essere FALSE .

Devi scomporre le cose in più fasi. Il debug dovrebbe essere eseguito testando i pezzi alla volta e dimostrando gradualmente cosa funziona per isolare ciò che non lo fa. Non cercare mai di sistemare tutto in una volta, affronta le cose in modo metodico.

Esegui questo 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