Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Saída errada na consulta FULL OUTER JOIN


Com base no que você disse na seção de comentários, acho que você precisa alterar um trecho de código ...
  • O que eu quero é que o cartão não tenha field14 como 'Test card'



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

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


Construa uma tabela lógica para verificar se você realmente deseja AND ou se você quiser 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




EDITAR Siga para comentar

Usando OR no código acima não pode gerar TRUE quando Field14 é 'Test card' . Ambos os testes geram FALSE e assim o resultado deve ser FALSE .

Você precisa quebrar as coisas em etapas. A depuração deve ser feita testando partes de cada vez e provando gradualmente o que funciona para isolar o que não funciona. Nunca tente resolver tudo de uma vez, aborde as coisas metodicamente.

Faça este teste...
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