sql merge into

连表更新操作:merge into

1、UPDATE或INSERT

2、UPDATE和INSERT子句可以加WHERE子句

3、ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表

4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

 

1。根据B表查询结果表C 更新表A 当year相等的时候,如果A表没有则插入C表的内容

MERGE INTO A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON (A.id=C.AID)

WHEN MATCHED THEN

UPDATE SET A.YEAR=C.YEAR

WHEN NOT MATCHED THEN

INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);

commit;

 

2.只进行update操作,利用表B查询结果C去更新表A 的数据

merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID)

WHEN MATCHED THEN

UPDATE SET A.YEAR=C.YEAR;

 

3.利用表B的查询数据表C对A表进行插入操作,

merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C ON(A.ID=C.AID)

WHEN NOT MATCHED THEN

insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);

 

4.利用表B查询的数据表C对表A进行更新的新增操作,在更新和新增的时候对on筛选的记录再做一次条件判断,控制哪些需要更新,哪些需要插入。

merge into A_MERGE A USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C

ON(A.id=C.AID)

when matched then

update SET A.name=C.name where C.city != '江西'

when not matched then

insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city='江西';

 

 

5.无条件的insert

有时候我们需要将一张表中所有的数据插入到另一张表,此时就可以添加常量过滤来实现,让其只满足匹配和不匹配,这样就只有update或者只有insert,这里我们要无条件全插入,则只需将on中的条件设置为永假。

merge into C_MERGE C USING (select B.AID,B.NAME,B.City from B_MERGE B) C ON (1=0)

when not matched then

insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City);

 

6.带delete 的update

MERGE提供了在执行数据操作时清除行的选项. 你能够在WHEN MATCHED THEN UPDATE子句中包含DELETE子句. 

DELETE子句必须有一个WHERE条件来删除匹配某些条件的行.匹配DELETE WHERE条件但不匹配ON条件的行不会被从表中删除.

但我觉得这个带where条件的update差不多,都是控制update,完全可以用带where条件的update来实现。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值