What's wrong with the following query? Can you spot the dead code?
create table tosses ( attempt int identity(1,1) primary key, fate char(1), constraint ck_tosses check(fate in ('H','T') or fate is null) ); insert into tosses(fate) values ('H'), ('H'), (null), ('T'), (null), ('H'), ('T'); select attempt, fate, case fate when 'H' then 'Head' when 'T' then 'Tail' when null then 'Fate not yet determined' else 'http://9gag.com/gag/4380545' end as fate_result from tosses
Live code: http://www.sqlfiddle.com/#!3/6a61e/2
The output of that is this:
| ATTEMPT | FATE | FATE_RESULT | -------------------------------------------------- | 1 | H | Head | | 2 | H | Head | | 3 | (null) | http://9gag.com/gag/4380545 | | 4 | T | Tail | | 5 | (null) | http://9gag.com/gag/4380545 | | 6 | H | Head | | 7 | T | Tail |
The dead code is the WHEN NULL, the else part on the query above is just a decoy ツ To correct the dead code, we should change the WHEN NULL to WHEN fate IS NULL
select attempt, fate, case when fate is null then 'Fate not yet determined' else case fate when 'H' then 'Head' when 'T' then 'Tail' else 'http://9gag.com/gag/4380545' end end as fate_result from tosses
Live code: http://www.sqlfiddle.com/#!3/6a61e/3
Output:
| ATTEMPT | FATE | FATE_RESULT | ---------------------------------------------- | 1 | H | Head | | 2 | H | Head | | 3 | (null) | Fate not yet determined | | 4 | T | Tail | | 5 | (null) | Fate not yet determined | | 6 | H | Head | | 7 | T | Tail |
You can also do the other form of CASE expression:
select attempt, fate, case when fate = 'H' then 'Head' when fate = 'T' then 'Tail' when fate is null then 'Fate not yet determined' else 'http://9gag.com/gag/4380545' end as fate_result from tosses
Live code: http://www.sqlfiddle.com/#!3/6a61e/4
Output:
| ATTEMPT | FATE | FATE_RESULT | ---------------------------------------------- | 1 | H | Head | | 2 | H | Head | | 3 | (null) | Fate not yet determined | | 4 | T | Tail | | 5 | (null) | Fate not yet determined | | 6 | H | Head | | 7 | T | Tail |
On both form of the correct query above, the dead code in that query is no longer the NULL scenario, the dead code is the ELSE part as we have CHECK constraint in place.
Happy Coding! ツ
No comments:
Post a Comment