トップページに戻る
次の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を使う方法が分かりやすいと思います。