日期:2014-05-17  浏览次数:20801 次

关于merge语句的问题

合并数据
1.目标表table1结构及数据如下:
O与A为复合主键
O    A    V
球   红   56
球   黄   56
输入表table2结构及数据如下:
O与A为复合主键
O    A    V
球   红   78
球   黄   0
球   蓝   8

请用一条merge语句合并两张表,当输入V为0的数据表示要删除table1中对应数据,最终结构是在table1表中的数据为:
O    A    V
球   红   78
球   蓝   8

求大神解答,谢谢!!!
------解决方案--------------------
引用:
合并数据
1.目标表table1结构及数据如下:
O与A为复合主键
O    A    V
球   红   56
球   黄   56
输入表table2结构及数据如下:
O与A为复合主键
O    A    V
球   红   78
球   黄   0
球   蓝   8

请用一条merge语句合并两张表,当输入V为0的数据表示要删除table1中对应数据,最终结构是在table1表中的数据为:
O    A    V
球   红   78
球   蓝   8

求大神解答,谢谢!!!


MERGE INTO T1
USING T2
ON (T1.O = T2.O AND T1.A = T2.A)
WHEN MATCHED THEN
  UPDATE SET T1.V = T2.V DELETE WHERE T2.V = 0
WHEN NOT MATCHED THEN
   INSERT (T1.O,T1.A,T1.V) VALUES(T2.O,T2.A,T2.V)

------解决方案--------------------
merge into table1 t
using table2 t1
on(t.o=t1.o and t.a=t1.a)
when matched then
    update set t.v=t1.v delete where t1.v=0
when not matched then
    insert values(t1.o,t1.a,t1.v);

select * from table1;