小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【Oracle】JOINを使ったUPDATE文で複数レコードを同時に更新する

はじめに

OracleでテーブルAとテーブルBを結合して、条件にマッチするレコードを複数レコード同時に更新する方法について書いています。

Oracleの基本 ~データベース入門から設計/運用の初歩まで
渡部 亮太 相川 潔 日比野 峻佑 岡野 平八郎 宮川 大地
技術評論社
売り上げランキング: 65,273

Oracle 結合を含んだ更新: 使えないプログラマーOracle 結合を含んだ更新: 使えないプログラマー

用意したテーブル

以下のようなテーブルを用意します。

  • テーブル01

f:id:replication:20140916063329p:plain

  • テーブル02

f:id:replication:20140916063347p:plain
テーブル01と02は同じようなデータ構造をしていて、性別が女性のレコードのみ、名前を変更しています。
今回は、女性のレコードのみ、table02のNAMEとFURIGANAでtable01テーブルのカラムを更新するといったことを1回のSQL発行で実現してみます。

JOINを使ったUPDATE文で複数レコードを同時に更新する

ポイントは、Update句の中でJoinが使えないのでサブクエリ内でJOINを指定します。

UPDATE
(
  SELECT 
    t1.NAME t1name, t1.FURIGANA t1furigana, t1.SEIBETSU t1seibetsu,
    t2.NAME t2name, t2.FURIGANA t2furigana, t2.SEIBETSU t2seibetsu
  FROM
    table01 t1
  INNER JOIN 
    table02 t2
  ON 
    t1.id = t2.id
)
SET t1name = t2name, t1furigana = t2furigana
WHERE t1seibetsu = '';
実行結果

f:id:replication:20140916063956p:plain

関連記事