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