サイトアイコン SE日記

【SQL】UPDATEでNULLだったら更新しない方法


このページでは、ORACLEデータベースのSQLで、UPDATE文で列の値がNULLの場合に、カラムの値を更新しない方法を紹介しています。

UPDATE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】UPDATE文の書き方:サンプル多数あり

NULLのレコードを更新対象にしない方法

ある列の値がNULLのレコードを更新対象にしないように、対象外とする方法です。

更新対象としないように、UPDATE文を書く時にWHERE句の条件に、「NULLでないこと」を加えます。列値がNULLのレコードを対象外にするには、「列名 IS NOT NULL」を条件に加えます。

次のSQLでは「a.col1 IS NOT NULL」と条件を追加し、COL1列の値がNULLの場合は、更新対象外としています。

UPDATE
    tab1 a
SET
    a.col3 = 'AAAAA'
WHERE
    a.col1 IS NOT NULL
;

列値がNULLのレコードだけを対象にしたい場合は、「列名 IS NULL」を条件に加えます。

列の値がNULLだったらカラムの値を変更しない

列の値がNULLだったらカラムの値を変更しない方法です。

列の値がNULLだったら~という条件を、CASE式を使って条件分岐させることで実現することが出来ます。

次のSQLでは、NULLだったら元の列の値を、NULLでない場合は指定の値で更新しています。

UPDATE
    tab1 a
SET
    a.col3 = CASE
                 WHEN a.col1 IS NULL THEN a.col3
                 WHEN a.col1 IS NOT NULL THEN 'AAAAA'
             END
;

次のSQLも結果は同じですが、NULL出ない場合は更新し、それ以外の場合はELSEで元の列の値で更新することが出来ます。

UPDATE
    tab1 a
SET
    a.col3 = CASE
                 WHEN a.col1 IS NOT NULL THEN 'AAAAA'
                 ELSE a.col3
             END
;

まとめ

UPDATE文で、列の値がNULLの場合に、更新しない方法は2つあります。

WHERE句の条件で列の値がNULL値のレコードを対象外にする方法と、列の値がNULLの場合に元の値で更新する方法があります。

アプリやプログラムの要件に合わせて、使い分けをしてみてください。

この他にも、UPDATE文の様々な書き方を解説しております。
詳しくは「【SQL】UPDATE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。

モバイルバージョンを終了