【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文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。