oracle 中merage Into的使用
来源:互联网 发布:美工学习 编辑:程序博客网 时间:2024/06/03 14:57
在正式开发中,例如数据汇总,有两张表a表(子表)和b表(总表),需求,如果b表中有和a表进行关联的数据就更新相应的次数,如果b表中没有关联数据,就将a表中的数据插入到b表中;一般做法是先去b表中拿a表相应的字段去查询,如果查询到数据就执行update sql语句,否则就执行insert sql语句;但是当数据量特别大的时候可能会出现性能问题;但是oracle提供了一个marge into 方法,该方法是判断是否有符合条件的语句,如果有就进行更新语句,否则就进行数据的插入;
marge into语法:
- 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 ! ]
情景,例如a表,b表(a表的日志表),首先进行判断b日志表中是否有a表的日志,如果没有a表的日志就插入a表的日志,否则就更新日志的提交时间,sql如下:
a表字段 id namesex
b表字段logid idname sex
merge into al using(select * from b where id='1') s on(l.id=s.id)
when matched then
update set name='质量'
when not matched then
insert values ('1', '旺财', '男');
commit;
踩过的雷1 :
使用merge的时候,在进行数据更新的时候,on中的判断条件是不可以更新的;
单表操作:例:
情景,对于单表操作时,例如对一个表中的数据进行判断,如果表中含有指定数据,就更新,否则就插入一条新的数据
例 a表字段 idname sexcount
merge into a using(select '1' id from dual) c on(a.id=c.id)
when matched then
update set count=100 where id='1'
when not matched then
insert
values (sys_guid(), '旺财', '女', 1, '10'));
commit;
踩过的雷2:开始的时候using中不是用的临时表,而是写的select id from a where id='2'的时候,发现,当using中查到数据时是可以更新的,但是using中查不到数据,数据无法插入,然后找了一些资料发现,merge into 语句,在useing()括号中的sql语句如果查询不到数据,是既不执行update语句也不执行insert语句的;所以在使用merge into时,要确保useing后面的sql语句可以查询到结果;
- oracle 中merage Into的使用
- db2中merage 的用法
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- oracle 中 merge into 的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- Oracle 中 merge into的使用
- Oracle中merge into的使用
- Oracle中merge into的使用
- 优化
- Tarjan算法 计算有向图的强连通量(可作为模板)-------CCF CSP 高速公路
- memset函数详解
- (十九)ListView 复用思想
- C++中二维数组的动态申请内存
- oracle 中merage Into的使用
- 洛谷 P1231 教辅的组成
- java方法调用(2)
- 破解NET的四大神器
- Java计算卡方值和P值
- Java:String、StringBuffer和StringBuilder的区别
- 如何通过多个id查询多条数据
- Selenium遇到的问题1 Pycharm不支持中文编码
- java基础学习1