📌

【SQL】CASEでWHEN条件を複数指定したい

2020/10/07に公開

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に限らずすべてのmsgwaaになる。 # なぜ?

ちなみに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`

すべてのmsgwooになる。 # 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