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

2-2-12 merge(1レコードのみ)

SQLパズル

mergeTesテーブル
ColA  ColB
----  ----
   1     1
   2     1
   3     1

mergeTesテーブルに
ColAが4のレコードがなければ、ColA=4,ColB=1のレコードを追加し、
ColAが4のレコードがあれば、ColA=4のレコードのColBを9に更新する。


データ作成スクリプト

create table mergeTes(
ColA number(1),
ColB number(1),
primary key(ColA));

insert into mergeTes values(1,1);
insert into mergeTes values(2,1);
insert into mergeTes values(3,1);
commit;


SQL

merge into mergeTes a
using dual b
on (a.ColA = 4)
when matched then
update set a.ColB=9
when not matched then
insert(a.ColA,a.ColB) values(4,1);


解説

mergeするのが1レコードのみの場合は、
using句にインラインビュー指定せずに、dualシノニムを指定して、
追加時と更新時で違う値を指定できます

mergeするのが複数レコードの場合は、
using句にunionを使ったインラインビューを指定して、
decode関数かcase式を使えば
追加時と更新時で違う値を指定できます