MERGE INTO 详解
2018-01-12 22:26
148 查看
MERGE INTO
基本用法
MERGE INTO TABLE1 t1 --要操作的表 USING TABLE2 t2 --条件的表 ON (t1.A=t2.A) --关联条件 WHEN MATCHED THEN --匹配 UPDATE SET t1.A='abc'--跟新语句 where t1.B = 123 WHEN NOT MATCHED THEN --不匹配 INSERT VALUES('ABC',123); --插入语句
注意点1: on里面的关联条件实际效果——每条t2表里面的数据去t1表里面匹配
如果关联条件里没有t1.属性=t2.属性 就会造成对t1表的全表扫描,查询就会特别耗时
注意点2:WHEN MATCHED THEN/WHEN NOT MATCHED THEN 可以只存在一个
注意点3:update语句后面可同时执行删除 UPDATE SET t1.A=”abc” where t1.B = 123 DELETE WHERE t1.C=’XYZ’
以下是实际系统遇到的问题
需求:顾客商品浏览记录表,如果已经插入了,浏览次数+1,没有浏览过新增一条耗时
MERGE INTO 浏览记录表 t1 USING (select count(*) as count from 浏览记录表 t where t.顾客编号 = '123' and t.商品编号 = 'abc' ) t2 ON (count > 0) WHEN MATCHED THEN UPDATE SET t1.次数 = t1.次数+1, where t1.顾客编号 = '123' and t1.商品编号 = 'abc' WHEN NOT MATCHED THEN INSERT VALUES('123','abc',1); --由于浏览记录表数据量特别大 并且关联条件 ON (count > 0)里面没有t1.属性=t2.属性,故每条t2的记录都是对t1表的全表扫描,特别耗时
改进
MERGE INTO 浏览记录表 t1 USING (select '123' as 顾客编号,'abc' as t.商品编号 from dual) t2 ON (t1.顾客编号 = t2.顾客编号 and t1.商品编号 = t2.商品编号) WHEN MATCHED THEN UPDATE SET t1.次数 = t1.次数+1, where t1.顾客编号 = '123' and t1.商品编号 = 'abc' WHEN NOT MATCHED THEN INSERT VALUES('123','abc',1);
相关文章推荐
- oracle merge into 用法详解
- Merge into的使用详解
- Oracle Merge Into 的用法详解实例
- oracle merge into 用法详解
- Merge into的使用详解-你Merge了没有
- Oracle Merge Into 的用法详解实例
- [转] Merge into的使用详解-你Merge了没有
- oracle merge into 用法详解
- Oracle Merge Into 的用法详解实例
- merge into 用法详解
- Merge into的使用详解-你Merge了没有【转】
- [转] Merge into的使用详解-你Merge了没有
- oracle merge into 用法详解
- oracle merge into 的用法详解+实例
- Oracle Merge Into 的用法详解实例
- Merge into使用详解-你Merge了没有
- oracle merge into 用法详解
- oracle merge into 用法详解
- Merge into使用详解-你Merge了没有
- oracle merge into 用法详解