トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

5-50 プライマリキーの交換

SQLパズル

名前テーブル
Name  ID
----  --
aaaa   1
bbbb   2
cccc   3
dddd   4
eeee   5

IDが1のレコードのIDを2
IDが2のレコードのIDを3
IDが3のレコードのIDを1
に更新する。

更新結果
Name  ID
----  --
aaaa   2
bbbb   3
cccc   1
dddd   4
eeee   5


データ作成スクリプト

create table 名前(
Name char(4),
ID   number(1),
primary key(ID));

insert into 名前 values('aaaa',1);
insert into 名前 values('bbbb',2);
insert into 名前 values('cccc',3);
insert into 名前 values('dddd',4);
insert into 名前 values('eeee',5);
commit;


SQL

update 名前
set ID = case ID
         when 1 then 2
         when 2 then 3
         when 3 then 1 end
where ID in(1,2,3);


解説

単純case式で、IDの値に応じた値に更新してます。