merge into实现

来源:互联网 发布:淘宝交易纠纷处理规则 编辑:程序博客网 时间:2024/06/15 15:00

如果你遇到这样的情况:存在对一张数据量很大的表,你需要对里面的大量数据进行更新,如果数据不存在,就进行插入的操作。那么你会怎么做呢?是不是先根据条件查询一番,如果存在,那么就更新,否则就插入?其实,你大可不必这么做。Oracle9i 后可以用merge into轻轻松松搞定这个问题,避免多次的查询判断以及更新插入操作。

1.merge into简介

用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE

2.merge into语法

  • MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)

  • WHEN MATCHED THEN

  • [UPDATE sql]

  • WHENNOT MATCHED THEN

  • [INSERT sql]

  • 作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表

3.merge into简单示例分析


利用merge into实现【如果原先库存中存在这个商品,那么就直接更新,否则就插入的操作】:

  • MERGE INTO STOCK A USING GOODS B ON (A.NAME=B.NAME)

  • WHEN MATCHED THEN

  • UPDATE SET A.REST=A.REST+B.NUM

  • WHEN NOT MATCHED THEN

  • INSERT(A.ID,A.NAME,A.REST) VALUES((select max(ID)+1 from STOCK),B.NAME,B.NUM);

  • COMMIT;

当上面的语句执行后,查询stock库存表如下:


原创粉丝点击