【SQL】UPDATEでCASE式を使って更新する方法
このページでは、データを更新するSQLであるUPDATE文で、CASE式を使って条件分岐させて列の値を更新する方法を紹介しております。
UPDATE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】UPDATE文の書き方:サンプル多数あり
UPDATE文の基本構文
UPDATE文の基本的な構文は次の通りです。
UPDATE テーブル名 SET 列名 = 値[,列名 = 値] [WHERE 条件];
CASE式を使って条件分岐する方法
UPDATE文のSET句で、CASE式を使うことで、条件分岐させて値を更新することが出来ます。
基本的な使い方
基本的には、SET句の右辺、列の値を設定するときに使います。
次のSQLでは、COL2の値によって、COL1を更新する値を条件分岐して変えています。
UPDATE
tab1
SET
col1 = CASE WHEN col2 = 'A' THEN 100
WHEN col2 = 'B' THEN 80
WHEN col2 = 'C' THEN 60
WHEN col2 = 'D' THEN 40
WHEN col2 = 'E' THEN 20
ELSE 0
END;
複数の式を指定する方法
CASE式は複数の式を条件に指定することもできます。
次のSQLでは、「col2 = ‘A’ AND col3 = ‘XXXX’」や「col2 = ‘B’ AND col3 = ‘YYYY’」といったように、複数の式を指定しています。ANDの他にもORなど、他の比較演算子を使うことが可能です。
UPDATE
tab1
SET
col1 = CASE WHEN col2 = 'A' AND col3 = 'XXXX' THEN 100
WHEN col2 = 'B' AND col3 = 'YYYY' THEN 80
WHEN col2 = 'C' THEN 60
WHEN col2 = 'D' THEN 40
WHEN col2 = 'E' THEN 20
ELSE 0
END;
CASEを入れ子にする方法
CASE式は入れ子にすることもできます。
次のSQLでは、1つ目のCASE式の中で、2つ目のCASE式を呼び出しています。
UPDATE
tab1
SET
col1 = CASE WHEN col2 = 'A'
THEN CASE WHEN col3 = 'XXXX' THEN 100
WHEN col3 = 'YYYY' THEN 200
ELSE 0
END
ELSE 0
END;
ただし、CASE式を入れ子にしすぎると、複雑になり、読みづらくなるので注意が必要です。
まとめ
UPDATE文で、CASE式を使うときには、基本的に列の値を指定するときに使います。
CASE式は複数の式を指定したり、入れ子にすることもでき大変便利です。ただし、複雑になりがちなので、注意しつつコーディングしていきましょう。
この他にも、UPDATE文の様々な書き方を解説しております。
詳しくは「【SQL】UPDATE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。