トップページに戻る    次のSQLServerのサンプルへ    前のSQLServerのサンプルへ

3-3 結合を伴うupdate文

SQLパズル

Table1            Table2
ID  Val           ID  Val
--  ----------    --  --------
 1  牛若丸         1  源義経
 2  木下藤吉郎     2  豊臣秀吉
 3  徳川家康
 4  明智光秀

Table2.Valを、
Table2.IDと等しいTable1.IDを持つTable1.Valで
updateする。

Table1、Table2のプライマリキーは、IDとする。

更新結果
ID  Val
--  --------
 1  源義経
 2  豊臣秀吉
 3  徳川家康
 4  明智光秀


データ作成スクリプト

create table Table1(
ID  int,
Val varchar(10),
primary key(ID));

insert into Table1 values(1,'牛若丸')
insert into Table1 values(2,'木下藤吉郎')
insert into Table1 values(3,'徳川家康')
insert into Table1 values(4,'明智光秀')

create table Table2(
ID  int,
Val varchar(10),
primary key(ID));

insert into Table2 values(1,'源義経')
insert into Table2 values(2,'豊臣秀吉')
go


SQL

--■■■サブクエリを使う方法■■■
update Table1
set Val = (select b.Val
             from Table2 b
            where b.ID = Table1.ID)
where exists(select b.Val
              from Table2 b
             where b.ID = Table1.ID)
go

--■■■UpdatableViewを使う方法■■■
with UpdView as(
select a.Val as OldVal,b.Val as NewVal
  from Table1 a,Table2 b
 where a.ID = b.ID)
update UpdView set OldVal = NewVal
go

--■■■結合を使う方法1■■■
update Table1
set Val = b.Val
from Table2 b
where Table1.ID = b.ID
go

--■■■結合を使う方法2■■■
update a
set Val = b.Val
from Table1 a
Join Table2 b on a.ID = b.ID
go


解説

UpdatableViewを使う方法が分かりやすいと思います。