sql >> Base de Datos >  >> RDS >> Sqlserver

Salida incorrecta en la consulta FULL OUTER JOIN

Según lo que ha dicho en la sección de comentarios, creo que necesita cambiar un fragmento de código...

  • Lo que quiero es que la tarjeta no tenga field14 como 'Test card'


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

=>

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


Cree una tabla lógica para verificar si realmente desea AND o si quieres 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 Seguir para comentar

Usando OR en el código anterior no puede producir TRUE cuando Field14 es 'Test card' . Ambas pruebas arrojan FALSE y entonces el resultado debe ser FALSE .

Necesitas dividir las cosas en etapas. La depuración debe realizarse probando piezas a la vez y probando gradualmente qué funciona para aislar lo que no funciona. Nunca intentes resolver todo de una vez, aborda las cosas metódicamente.

Haz esta prueba...

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