📌
【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