トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-60 ポイントをmerge
SQLパズル
Pointテーブル
会員 店舗 ポイント
------ ---- --------
準会員 店1 10
準会員 店2 20
正会員 店1 20
正会員 店3 15
準会員のレコードを、
正会員の、店舗が一致するレコードに、
upsert(追加更新)する(更新時はポイントを加算)
更新結果
会員 店舗 ポイント
------ ---- --------
準会員 店1 10
準会員 店2 20
正会員 店1 30 ←10+20
正会員 店2 20
正会員 店3 15
データ作成スクリプト
create table Point(
会員 char(6),
店舗 char(3),
ポイント number(2));
insert into Point values('準会員','店1',10);
insert into Point values('準会員','店2',20);
insert into Point values('正会員','店1',20);
insert into Point values('正会員','店3',15);
commit;
SQL
merge into Point a
using (select 店舗,sum(ポイント) as ポイント
from Point
where 会員 = '準会員'
group by 店舗) b
on (a.会員 = '正会員' and a.店舗 = b.店舗)
when matched then
update set a.ポイント = a.ポイント + b.ポイント
when not matched then
insert(a.会員,a.店舗,a.ポイント) values('正会員',b.店舗,b.ポイント);
解説
mergeを使うと、upsert(追加更新)することができます