您的位置:首页 > 数据库 > Oracle

oracle 对对表匹配的进行修改匹配不上的可以进行新增 (MERGE INTO)

2015-12-14 15:23 543 查看
MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。
通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,
连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。
这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
*/
/*语法:
MERGE [INTO [schema .] table [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 into users
using doctor
on (users.user_id = doctor.doctorid)
when matched then
update set users.user_name = doctor.doctorname
when not matched then
insert
values
(doctor.doctorid,
doctor.doctorid,
'8736F1C243E3B14941A59FF736E1B5A8',
doctor.doctorname,
sysdate,
'T',
' ',
doctor.deptid,
'b319dac7-2c5c-496a-bc36-7f3e1cc066b8');
复制代码
when matched then 是对如果可以匹配的进行操作

when not  matched then 是对不能匹配的进行操作;
如果有需要可以单独进行新增和修改。

如下:单独进行修改和新增
这是table1和table2的原始数据
merge into TABLE1 t1
USING TABLE2 T2--(table2 可以换成一个select的子语句 "using (select * from tbaletemo) t2")
ON (t1.dd1 = t2.aa1)
when matched then-- 只是修改
update set t1.dd2 = t2.aa2, t1.dd3 = t2.aa3;
commit;
  以上脚本是修改table1如果能在table2中可以找到相应的数据(T1.DD1=T2.AA1这是对应的条件)执行完后的数据是
merge into TABLE1 t1
USING TABLE2 T2
ON (t1.dd1 = t2.aa1)
--when matched then
--update set t1.dd2 = t2.aa2, t1.dd3 = t2.aa3
WHEN NOT MATCHED THEN
insert(t1.dd1,t1.dd2)values(t2.aa1,t2.aa2); --只是新增
  


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: