关于高斯/Oracle 的 MergeInto 语法

临时表方式拼装 MERGE INTO SQL 语句

1、主键冲突则更新

MERGE INTO table_9_copy T1 USING (
select id,name,age from (
select row_number() over (PARTITION by id order by age desc) row_number_column, id,name,age from (
select '0' as id,'名231字2' as name,'0' as age
 union all select '1' as id,'名字333' as name,'1' as age 
 union all select '9' as id,'名字3' as name,'9' as age
union all select '11' as id,'名字A' as name,'99' as age 
)) 
 where row_number_column = 1
) T2 ON ( T2.id=T1.id) WHEN MATCHED THEN  UPDATE SET T1.name = T2.name,T1.age = T2.age WHEN NOT MATCHED THEN   INSERT (id,name,age) VALUES(T2.id,T2.name,T2.age);

2、主键冲突则跳过(去掉一个WHEN MATCHED)

MERGE INTO table_9_copy T1 USING (
select id,name,age from (
select row_number() over (PARTITION by id order by age desc) row_number_column, id,name,age from (
select '0' as id,'名231字2' as name,'0' as age
 union all select '1' as id,'名字333' as name,'1' as age 
 union all select '9' as id,'名字3' as name,'9' as age
union all select '11' as id,'名字A' as name,'99' as age 
)) 
 where row_number_column = 1
) T2 ON ( T2.id=T1.id) WHEN NOT MATCHED THEN   INSERT (id,name,age) VALUES(T2.id,T2.name,T2.age);

3、临时表方式拼装 MERGE INTO SQL 语句

临时表方式拼装 MERGE INTO SQL 语句
      MERGE INTO table_9_copy T1 USING (select id,name,age from (
        select row_number() over (PARTITION by id order by age desc) row_number_column,
        id,name,age from table_9_copy_XXXXXXX)
        where row_number_column = 1
        ) T2 ON ( T1.id=T2.id) WHEN MATCHED THEN UPDATE SET T1.name=T2.name,T1.age=T2.age where T2.age > T1.age
      WHEN NOT MATCHED THEN   INSERT (id,name,age) VALUES(T2.id,T2.name,T2.age);
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值