インラインビューを使ったUPDATE文

テーブルのレコードを更新する場合、
通常の構文はこんな感じで単純に条件を指定して一致したレコードに対して更新をかけます。

UPDATE TBL1
SET
    col1 = 'hoge',
    col2 = SYSDATE
WHERE
    piyo = '更新条件';

 

テーブルに対して更新をかけるとき、
複雑な条件が無とシンプルに書けますが多くの場合、複雑な条件を指定しますよね。

 

条件によってはサブクエリ化して記述する法法もあると思いますが今日はインラインビューを使用したお話。
例としては以下のような感じです。

UPDATE
(
SELECT
   T1.col1  AS  name,
   T1.col2  AS  age,
   T2.col1  AS  prev_name,
   T2.col2  AS  prev_age
FROM
   TBL1 T1,
   TBL2 T2
WHERE
    T1.col3 = T2.col3
)
SET
   name = prev_name,
   age  = prev_age; 

 

イメージ的には更新する対象をSELECTしてくる副問合せで書いてしまおう!
という事です。

SELECTした項目を使って外側のUPDATE文で更新をかけるので、
更新したい項目は内側のSELECT文で全て取得する必要があります。

別のテーブルのデータを使って目的のテーブルデータを更新したい場合などに便利です。