📌
【SQL】CASEでWHEN条件を複数指定したい
WHENの後に条件を複数書きたい
select (case
when n = 1 or n = 2 then 'waa'
else 'woo'
end) as `msg`
定番の書き方だがこれだと条件が増えたときにwhenのあとが長くなる。
検索の変数(上でいうn)が共通の時は違う書き方ができないのか?と思って色々試したので
その経過をメモしておきます。【連続する数字でのみ解決】
条件式を省略
select (case
when n = 1 or 2 then 'waa'
else 'woo'
end) as `msg`
n=1, 2に限らずすべてのmsgがwaaになる。 # なぜ?
ちなみにorをandに変えると
select (case
when n = 1 and 2 then 'waa'
else 'woo'
end) as `msg`
n=1の時はwaa, それ以外はwooになる。 # and以降が無効
条件式の数値を括弧で囲う
select (case
when n = (1 or 2) then 'waa'
else 'woo'
end) as `msg`
すべてのmsgがwooになる。 # whenがうまく働いていない
orを,にすると
select (case
when n = (1, 2) then 'waa'
else 'woo'
end) as `msg`
エラーになる。# SQLで,は厳禁?
betweenを使う
select (case
when n between 1 and 2 then 'waa'
else 'woo'
end) as `msg`
n=1, 2の時はwaa, それ以外はwooになる。 # 連続する数字の場合はこれで解決
Discussion