sql >> Database >  >> RDS >> Sqlserver

Verkeerde uitvoer in de FULL OUTER JOIN-query

Op basis van wat je hebt gezegd in het opmerkingengedeelte, denk ik dat je één codefragment moet wijzigen...

  • Wat ik wil is dat die kaart geen field14 . mag hebben als 'Test card'


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

=>

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


Bouw een logische tabel op om te controleren of je echt AND . wilt of als je OR . wilt

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


BEWERKEN Follow-up om te reageren

OR . gebruiken in de bovenstaande code kan TRUE niet opleveren wanneer Field14 is 'Test card' . Beide tests leveren FALSE op en dus moet het resultaat FALSE zijn .

Je moet dingen in fasen opsplitsen. Debuggen moet worden gedaan door stukjes tegelijk te testen en geleidelijk te bewijzen wat werk is om te isoleren wat niet. Probeer nooit alles in één keer op een rijtje te zetten, benader dingen methodisch.

Voer deze test uit...

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. Wordnet sqlite Synoniemen en voorbeelden

  2. Een Alias-kolom gebruiken in de waar-clausule in Postgresql

  3. Postgres Match Alle matrixwaarden met dezelfde kolom met en voorwaarde

  4. zal pg_restore de bestaande tabellen overschrijven?