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

oracle 之 merge into 的用法

2014-05-11 22:34 519 查看
作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;

语法:

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ]

WHEN NOT MATHED THEN [execute something else here ! ]

-------实例-------

merge into a

using (select id,name from b ) c

on(a.id=c.id )

when matched then update set a.name=c.name

when not matched then insert (a.id,a.name) values (c.id,c.name);

作用:利用表 b 跟新表a ,条件是a.id=b.id,如果a表中没有该条件的数据就插入。

如果你的数据量很大,此sql效率非常高。

==================================================================================

简单来说,就是:“有则更新,无则插入”

从这句话里,应该可以理解到,merge into 操作一个对象'A'的时候,要有另外一个结果集做为源数据 'B'.

‘merge into’ 将B中的数据与A中的数据按照一定条件'C'进行对比,如果 A中数据满足C条件,则进行update操作,如果不满足条件 'C',则进行insert操作。(请注意这种对应关系)

2、 语法结构

MERGE [INTO] [schema.]table [alias]

USING {[schema.]table|views|query} [alias]

ON {condition}

WHEN MATCHED THEN UPDATE SET {clause}

WHEN NOT MATCHED THEN INSERT VALUES {clause}

我们可以用于单条数据的处理,也可以用于数据的批处理。对于merge into来说,那都是张飞吃豆芽儿,小菜一碟儿。而且效率要比单独执行update+insert 操作效率要高。

但是请注意,using语句中的结果集 B不可以与merge into 的对象A相同,否则,会因为结果集A,B恒等。

当 on() 进行等值判断时,只可以进行update操作,不能进行insert 操作,当 on() 进行不等值判断时,只可以进行insert操作,不能进行update操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: