merge into语句用法
原文地址: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语句中多次更新目标表的同一行。