ITスキル

【Oracle】UPDATE文で複数列を一気に更新する

複数のテーブルを組み合わせたUPDATE文

Oracleテーブル向けの、副問い合わせを用いたちょっと高度なUPDATE構文です。

恥ずかしながら、最近までこの方法を知りませんでした。
調査の仕方が良くなかったのかな…
気付いたきっかけも、検索したわけではなく試したらできたからです。エッヘン。

書き方は

UPDATE テーブル名
SET (列名A, 列名B, 列名C) = (SELECT A, B, C FROM ...)
WHERE...

これだけ。
列A,B,Cの値が、副問い合わせで取得した情報に基づき、上書きされます。

この書き方を知るまでは

UPDATE テーブル名
SET 列名A=(SELECT A FROM ...)
, 列名B=(SELECT B FROM...)
, 列名C=(SELECT C FROM ...)
WHERE...

といった具合に、カラムごとに副問い合わせを記述していました。
場合によっては同じようなSELECT文を複数書く必要があり、ゴチャっとします。

今回、メインテーブルの各カラムの値に、
サブテーブル(メインと同じキーをもつ)の数値を加算する
という必要が出てきて悩んでいました。加算値は一回だけ取ればいいので、先に取ってきてパラメータとして渡してやるか…と思っていたのですが、以下の表記で解決。

UPDATE MAIN_TABLE
SET ( 列名A, 列名B, 列名C)
=(SELECT MAIN_TABLE.列名A + SUB_TABLE.加算値
, MAIN_TABLE.列名B + SUB_TABLE.加算値
, MAIN_TABLE.列名C + SUB_TABLE.加算値
FROM SUB_TABLE
WHERE MAIN_TABLE.KEY = SUB_TABLE.KEY )

知らなかったのは、自分だけ?知らなかったという方、ご活用ください。

副問い合わせの結果は、一意に返ってくるようにしないとエラーになるのでご注意を。

COMMENT

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください