このページでは、ORACLEデータベースのSQLで、UPDATE文で列の値を、同じテーブルの値で更新する方法を紹介しています。
UPDATE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】UPDATE文の書き方:サンプル多数あり
同じテーブルの値で更新する方法
UPDATE文で、同じテーブルの値を使うときには、別表としてUPDATE句で取得します。
次のSQLでは、更新するTAB1テーブルをaとし、別表としてTAB1テーブルをbとして指定しています。aとbはINNER JOINで結合しています。
UPDATE
tab1 a
inner join tab1 b ON a.col1 = b.col1
SET
a.col2 = b.col3
;
条件が一致したレコードは、COL2の値がCOL3の値に更新されます。
同じテーブルの値をSELECTして更新する方法
同じテーブルの値をSELECTする方法もあります。
先ほどのSQLを改造して、別表として呼び出すTAB1テーブルをSELECTして副問合せ(サブクエリ)として記述することもできます。
次のSQLでは、「(SELECT col1,col3 FROM tab1 )」として、別表をサブクエリーとして呼び出して使用しています。
UPDATE
tab1 a
inner join (SELECT col1,col3 FROM tab1 ) b on a.col1 = b.col1
SET
a.col2 = b.col3
where
a.col1 = '00001'
;
別のテーブルの値で更新する方法
UPDATE文で別のテーブルの値を使って更新する場合には、JOINを使ってテーブルを結合する方法があります。
実際に、テーブルを2つ作って実行してみます。
どちらも同じレイアウトで、空のテーブルを2つ作ります。
更新するためのレコードも登録します。
それぞれのテーブルに主キー違いで、XXXXXの大文字と小文字、YYYYYの大文字と小文字を格納したレコードを格納しました。
insert into tab1 values('00001','XXXXX','xxxxx');
insert into tab1 values('00002','XXXXX','xxxxx');
insert into tab1 values('00003','XXXXX','xxxxx');
insert into tab2 values('00001','YYYYY','yyyyy');
insert into tab2 values('00002','YYYYY','yyyyy');
insert into tab2 values('00003','YYYYY','yyyyy');
UPDATE文です。
次のUPDATE文では、INNER JOINを使ってTAB1テーブルのレコードを更新しました。
COL2の値、COL3の値はそれぞれTAB2テーブルの値を取得して更新しました。
UPDATE
tab1 a
inner join tab2 b on a.col1 = b.col1
SET
a.col2 = b.col2
,a.col3 = b.col3
where
a.col1 = '00001'
;
更新した結果は次のようになりました。
1行目のレコードが、TAB2テーブルの列の値によって更新されました。