sql >> Databáze >  >> RDS >> Sqlserver

Chybný výstup v dotazu FULL OUTER JOIN

Na základě toho, co jste řekli v sekci komentářů, si myslím, že musíte změnit jeden fragment kódu...

  • Chci, aby karta neměla field14 jako 'Test card'


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

=>

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


Vytvořte logickou tabulku, abyste zjistili, zda opravdu chcete AND nebo chcete-li 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


UPRAVIT Odešlete komentář

Pomocí OR ve výše uvedeném kódu nemůže poskytnout TRUE když Field14 je 'Test Card' . Oba testy dávají FALSE takže výsledek musí být FALSE .

Je potřeba věci rozdělit na etapy. Ladění by mělo být prováděno testováním kusů najednou a postupným prokazováním toho, co funguje, aby se izolovalo to, co ne. Nikdy se nesnažte vše vyřešit najednou, přistupujte k věcem metodicky.

Spusťte tento 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



  1. Jak nahradit hodnoty null textem?

  2. Velmi pomalá (1 sekunda) připojení

  3. Co bych rád viděl v Amazon EC2 pro správu databází

  4. UNION 2 Select-query s počítanými sloupci