merge into语句用法

发布时间 2023-08-08 23:21:35作者: eyesfree

原文地址:https://zhuanlan.zhihu.com/p/47884584

使用merge语句从一个或多个源中选择行以进行更新或插入表或视图。可以指定条件以确定是update还是insert目标表或视图。

merge语句是组合多个操作的便捷方式。它可以让你避免多次使用INSERT,UPDATE和DELETE语句去操作数据。

语法:

merge [hint]
 into[schema.] {table |view} [ t_alias ]
 using {[schema.] {table|view }|subquery } [t_alias ]
 on ( condition )
 when matched then [merge_update_clause]
  when not matched then  [merge_insert_clause ];

参考源:MERGE

描述:

merge into  baseTable   bt
 using  (select * from tempTable)  temp 
 on (bt.code = temp.code)
 when matched then  inset/update/delete语句
 when not matched then  inset/update语句;

1. 用一个表(tempTable)按条件去操作另一个表(baseTable)的数据,如果on 条件为true 则表示条件匹配 执行when matched then后的语句,否则执行when not matched then;

2. when matched then和when not matched then 可选,我们可以至使用其中一个;

3. update 或insert语句 不用再写表名;

例:
when matched then 
   update set  bt.name = temp.name  where ....
when not matched then 
   insert  (  ,  ,  ,  )   values (  ,  ,  ,  )
--表名省略不写

3. delete语句只能写在matched(匹配)情况中,不匹配时无法删除将抛出错误;

4. using后可以是一张表,也可以是子查询组成的临时表;

5.merge是一个确定性的陈述,无法在同一MERGE语句中多次更新目标表的同一行。