sql >> Databasteknik >  >> RDS >> Sqlserver

Fel utdata i FULL OUTER JOIN-frågan

Baserat på vad du har sagt i kommentarsfältet tror jag att du måste ändra ett kodavsnitt...

  • Vad jag vill är att kortet inte ska ha field14 som 'Test card'


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

=>

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


Skapa en logiktabell för att kontrollera om du verkligen vill ha AND eller om du vill ha 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


REDIGERA Följ upp för att kommentera

Använda OR i koden ovan kan inte ge TRUE när Field14 är 'Test card' . Båda testerna ger FALSE och så resultatet måste vara FALSE .

Du måste bryta ner saker i etapper. Felsökning bör göras genom att testa bitar åt gången och gradvis bevisa vad som fungerar för att isolera det som inte gör det. Försök aldrig att reda ut allt på en gång, förhåll dig metodiskt.

Kör det här testet...

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. Hur kan jag köra många frågor på en sida?

  2. Hur infogar man HashMap i PostgreSQL som JSON-typ?

  3. MySQL Inner Join Query Flera tabeller

  4. Anropa en lagrad procedur från DECLARE-satsen när du använder markörer i MySQL