【SQL】UPDATEで他のテーブルの値で更新する方法

このページでは、ORACLEデータベースのSQLで、UPDATE文で他のテーブルの列値を使って、カラムの値を更新する方法を紹介しています。

UPDATE文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】UPDATE文の書き方:サンプル多数あり

UPDATEで別のテーブルの値で更新する方法

UPDATE文で別のテーブルの値を使って更新する場合には、JOINを使ってテーブルを結合する方法があります。

実際に、テーブルを2つ作って実行してみます。
どちらも同じレイアウトで、空のテーブルを2つ作ります。

create table tab1(col1 varchar(5),col2 varchar(5),col3 varchar(5),primary key(col1));
create table tab2(col1 varchar(5),col2 varchar(5),col3 varchar(5),primary key(col1));

更新するためのレコードも登録します。
それぞれのテーブルに主キー違いで、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文です。

次の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テーブルの列の値によって更新されました。

select * from tab1;
00001	YYYYY	yyyyy
00002	XXXXX	xxxxx
00003	XXXXX	xxxxx

まとめ

UPDATE文で別のテーブルのカラムの値を使って、列の値を更新する場合は、JOINを使って結合すると良いです。

他のテーブルのカラムを参照したいケースはよくあるので、ぜひ使い方を覚えてみてください。

この他にも、UPDATE文の様々な書き方を解説しております。
詳しくは「【SQL】UPDATE文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。