`
leeqq
  • 浏览: 138590 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

merge into使用方法

阅读更多

       在维护代码的时候,看见merge into语句,遂查询记录如下。

       在往数据库里保存数据的时候时常会遇到这种情况。如果一条记录已经存在,则更新相应的记录,如果不存在则插入这条新的记录。这时候就可以使用这个merge into来进行操作。至于如何判断一条记录是否存在,可以自己定义对应的判断条件。

其基本语法如下

merge into 表名 表别名 using 表名 表别名 on 条件

    when matched then update .........

    when not matched then insert.........

下面实际操作来看一下。

有如下表


对此表进行如下merge操作

MERGE INTO COURSE C 
USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC 
ON(C.CNO = NEWC.CNO) 
WHEN MATCHED THEN 
    UPDATE SET C.TNO=NEWC.TNO 
WHEN NOT MATCHED THEN 
    INSERT VALUES(NEWC.CNO,NEWC.CNAME,NEWC.TNO)

 先看第二行using部分,这里是从原表选取数据,如果有其他表,当然可以换成其他表,这里不再建其他表,直接使用原表。在using后面的括号里面所选取出来的数据如下

此表命名为NEWC。将会用此表往原表merge,也就是SQL文merge into后面写的那张表course。

下面就要判断条件,判断NEWC中的记录是否已经存在。判断条件就是用ON关键字来提示的。这里的条件是
 C.CNO = NEWC.CNO,也就是说如果原表C中已经存在相应的CNO的记录,表示该记录已经存在。对比发现CNO为6~10的记录在原表已经存在, 表示匹配,也是就matched,执行update子句,而cno为11~15的记录不存在,也就是not matched,执行insert子句。

执行结果如下。

 发现原来06~10的记录TNO字段被更新,并且新插入了CNO为11~15的记录。

当然在merge的时候,可以只选用update不用insert,或者只选用insert不用update。这里不再举例。

 

这是merge最基本的用法了,当然如果愿意,可以在update或者insert后面添加where判断,只更新或者只插入满足where条件的记录,

将表恢复至原来状态,修改上面的SQL如下。

MERGE INTO COURSE C 
USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC 
ON(C.CNO = NEWC.CNO) 
WHEN MATCHED THEN 
    UPDATE SET C.TNO=NEWC.TNO 
        WHERE C.CNAME='PHP'
WHEN NOT MATCHED THEN 
    INSERT VALUES(NEWC.CNO,NEWC.CNAME,NEWC.TNO) 
        WHERE NEWC.CNO<'12'

 所得结果如下

对比发现,并不想第一条SQL那样,现在只更新了CNO为09的记录,也就是CNAME为PHP的记录。插入的时候只插入了CNO为11的记录,满足条件CNO<12。

 

       在使用insert的时候,可以只插入部分字段,写法如下

       INSERT(CNO, TNO) VALUES(NEWC.CNO, NEWC.TNO)

这样得到的结果就是插入记录的时候只插入CNO和TNO字段的值,而CNAME将会为空。具体不再演示。

 

    在update后面还可配合delete语句,在更新的同时删除某些记录。

    仍然把表回复原样,进行如下操作。

MERGE INTO COURSE C 
USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC 
ON(C.CNO = NEWC.CNO) 
WHEN MATCHED THEN 
UPDATE SET C.TNO=NEWC.TNO 
DELETE WHERE C.CNO>'09'

 所得结果如下

对比发现,CNO为06~09的记录被更新,原有的CNO为10的记录被删除。

 

这里被删除记录不仅要满足DELETE关键字后面的where条件,还要满足ON关键字后面的条件,还要满足UPDATE后面where条件。

对原始表如下操作

MERGE INTO COURSE C 
USING (SELECT C.CNO+5 as CNO,C.CNAME,C.TNO FROM COURSE C) NEWC 
ON(C.CNO = NEWC.CNO)
WHEN MATCHED THEN 
    UPDATE SET C.TNO=NEWC.TNO WHERE C.CNO>'06' 
    DELETE WHERE C.CNAME='C#'

 
 所得结果如下

 对比发现只更新CNO为06~10的记录,符合update语句后面的where条件,然而并没有删除CNAME为'C#'的记录原因是该条记录不满足update语句后面的where条件。

 

merge into的用法大致记录如上,有待后面实际的应用

 

 

  • 大小: 3.4 KB
  • 大小: 3.4 KB
  • 大小: 4.8 KB
  • 大小: 3.6 KB
  • 大小: 3.2 KB
  • 大小: 3.4 KB
分享到:
评论

相关推荐

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Merge into的使用详解

    本篇文章将详细介绍`MERGE INTO`的使用,包括两种常见的写法,并通过实例进行说明。 一、`MERGE INTO`的基本语法 `MERGE INTO`语句的基本结构如下: ```sql MERGE INTO target_table USING source_table ON (join...

    oracle merge into的使用

    标题:Oracle Merge Into 的使用 描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为...

    Oracle中merge into的使用

    以下是一些`MERGE INTO`的使用示例: 1. **更新匹配的记录**: ```sql MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np....

    Oracle merge into用法

    `MERGE INTO`语句的一个关键优势是它允许使用`WHERE`子句来细化更新和插入的规则。这意味着你可以控制哪些记录会被更新,哪些记录会被插入,甚至可以排除某些特定的记录不进行任何操作。这种精细的控制能力对于数据...

    Merge Into 语句代替InsertUpdate

    非常经典的SQL经验,适合于数据库初学者及长期从事软件开发者

    浅谈Oracle数据库中Merge Into的用法.pdf

    Oracle 数据库中 Merge Into 的用法 在 Oracle 数据库中,Merge Into 语句是一种非常有用的功能,它主要用来合并 update 和 insert 语句,即用一个表中的数据来修 改或插入到另一个表中。Merge Into 语句的主要原则...

    DB2 MERGE INTO语句的使用

    DB2中的Merge语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,功能非常强大。

    利用 sqluldr2导出数据 使用sqlldr导入数据 通过merge into 合并更新数据

    下面将详细阐述如何使用这两个工具以及如何通过`MERGE INTO`语句进行数据合并更新。 1. SQLULDR2导出数据: SQLULDR2是Oracle提供的一款数据导出工具,它能够快速地将数据库中的数据导出到文本文件或其他格式的...

    使用BULK COLLECT, MERGE 语句提高sql执行效率

    详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询

    Hibernate中的merge使用详情解说

    例如,如果我们在使用 merge 方法前没有设置对象的 ID,那么 merge 方法将抛出异常。 在使用 merge 方法时,我们还需要注意 Session 的生命周期。在上面的示例代码中,我们可以看到,在第一个 Session 中,我们使用...

    oracle中merge into用法及实例解析

    虽然`MERGE INTO`本身不直接支持删除操作,但可以通过在`WHEN MATCHED THEN`部分使用`DELETE`语句结合特定条件来实现,例如删除不再存在于源表中的目标表记录。 通过这些用法,我们可以高效地管理数据,并在单个...

    pybigquery-merge-into:向pybigquery添加MERGE INTO支持

    主要类是pybigquery_merge_into.merge_clause.MergeInto() 。 例子 &gt;&gt; &gt; query = MergeInto ( target = target , source = source , onclause = target . c . t1 == source . c . s1 , when_clauses = [ ...

    merge用法详解(实例详解)

    【知识点详解】 ...通过以上介绍,我们了解了`MERGE INTO`语句的基本概念和使用方法,以及在实际场景中如何进行数据同步。在数据库管理和ETL过程中,合理运用`MERGE`能有效地提高数据处理的效率和准确性。

    oracle Merge 函数.doc

    Merge 函数的使用方式有三种:只更新不插入、只插入不更新和既插入也更新。 Merge 函数的基本用法 Merge 函数的基本语法结构为: ```sql MERGE INTO 目标表 USING 来源表 ON (条件) WHEN MATCHED THEN 更新操作 ...

    oracle死锁原因解决办法

    ##### 3.2 使用跟踪文件 除了alert.log外,Oracle还会为每个死锁生成一个跟踪文件(trace file),该文件包含了更多关于死锁的信息。在上述示例中提到的跟踪文件路径为 `e:\oracle\admin\GEDEON\udump\ORA01784.TRC...

    oracle数据匹配merge into的实例详解

    Oracle的`MERGE INTO`语句是一种强大的工具,用于根据源数据更新或插入目标表的记录。这个SQL命令结合了`INSERT`, `UPDATE`和`DELETE`操作,使得在处理数据匹配和同步时更加高效。在给定的实例中,`MERGE INTO`被...

    Mysql合并表Merge引擎

    1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...

Global site tag (gtag.js) - Google Analytics