OracleのUPDATE SELECT(SELECTした結果でUPDATEする)
OralceのUPDATEはUPDATE SELECT、つまりSELECTした結果でUPDATEすることができます。
UPDATEは「SET」で「更新列」と「値」を指定しますが、「値」をセットする箇所にSELECT文を挿入します。
--テーブルの値を更新する UPDATE {テーブル} SET {列1} = (SELECT {列A} FROM テーブル WHERE 条件) ,{列2} = 値2 ,{列3} = 値3 WHERE {条件} ;
サンプルデータ
empテーブル
empno | empname | add_no | address |
A001 | 佐藤花子 | 100-0000 | 東京都渋谷区1-1-1 |
addnoテーブル
add_no | address |
100-0000 | 東京都渋谷区1-1-1 |
100-0001 | 東京都渋谷区2-1-1 |
例1. UPDATE SELECT
--SELECTした結果でUPDATEする UPDATE emp SET address = (SELECT address FROM addno WHERE add_no = '100-0001') ,add_no = '100-0001' WHERE empno = 'A001';
empno | empname | add_no | address |
A001 | 佐藤花子 | 100-0001 | 東京都渋谷区2-1-1 |
ここではempテーブルの住所を別テーブル「addno」テーブルの内容で更新しました。
例2. UPDATE SELECT 複数列パターン
--SELECTした結果でUPDATEする UPDATE emp SET (address,add_no) = (SELECT address,add_no FROM addno WHERE add_no = '100-0001') WHERE empno = 'A001';
empno | empname | add_no | address |
A001 | 佐藤花子 | 100-0001 | 東京都渋谷区2-1-1 |
例1のUPDATEはさらに省略できます。UPDATEは複数列をまとめて記述することができます。ここではempテーブルの2つの列「address」「add_no」を別テーブル「addno」テーブルの内容で更新しました。
UPDATE SELECTするパターンとして2つとりあげました。
以上、OracleのUPDATE SELECT(SELECTした結果でUPDATEする)の使い方でした。
コメント