`

Merge Into 不能执行Insert的原因

SQL 
阅读更多

语法:

 

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时却出了问题,研究了好久,终于搞定。

 

错误的sql语句:

merge  into XJ_BK_FZY_TIMESET


  a

 using (select zxnj from XJ_BK_FZY_TIMESET



 where zxnj = '2006') b on (b.zxnj='2006')

  when matched then update set a.endtime = '20100519'  where a.zxnj = '2004' 

   when not matched then insert(a.zxnj, a.endtime) values('2006', '20100519') 

 注: XJ_BK_FZY_TIMESET(学籍_本科_分专业_时间设置):表中只有两个字段:zxnj:在学年级,endTime:截止时间。

 

这个sql的目的是XJ_BK_FZY_TIMESET表中存在zxnj=2006的数据时,执行update操作,否则执行insert操作。

这个sql从语法上是没错的而且程序是能够执行的

 

XJ_BK_FZY_TIMESET现在没有数据,执行上面的sql后,仍没有数据。手工插入一条zxnj=2006的数据后这条sql却能执行update操作。

 

错误原因:

 Merge Into执行时,会从using 搜出来的结果逐条与 on条件匹配,然后决定是update还是Insert。

所以using后面的sql没有查询到数据这个Merge Into语句是不会执行update和Insert操作的。

 

 

单表操作时建议写成两个SQL

 

 

 

3
1
分享到:
评论

相关推荐

    Merge Into 语句代替InsertUpdate

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

    oracle中merge into用法及实例解析

    merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...) WHEN MATCHED THEN [UPDATE sql] WHEN NOT MATCHED THEN [INSERT sql] 作用:判断B表...

    Oracle MERGE INTO的用法示例介绍

    1)主要功能 提供有条件地更新和插入数据到数据库表中 如果该行存在,执行一个UPDATE操作,如果是一个新行,执行INSERT操作 — 避免了分开更新 — 提高性能并易于使用 — 在数据仓库应用中十分有用 2)MERGE语句的...

    Oracle merge合并更新函数实例详解

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

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,...

    SQLServer中merge函数用法详解

    它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。 MERGE 目标表 USING 源表 ON 匹配...

    给定一条数据,若数据库中有则更新该数据,没有则新增一条数据。使用merge into实现

    1.merge into 的语法 MERGE INTO table_name alias1 USING (table | view | sub_query) alias2 ON (join condition) WHEN MATCHED THEN UPDATE table_name SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED...

    1Z0-47试题详解

    1Z0-47试题详解。例如: 1. You need to load ... merge命令只能针对一张表进行插入或者修改操作,不能针对多张表进行插入操作 D. insert命令没有with check option选项,with check option选项是create view时使用的

    MySQL Replace INTO的使用

    REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则...您不能从当前行中引用值,也不能在新行中使用值。如果您使用一个例如“SET col_

    SQL基础编写与调试优化

    MERGE INTO 连接 分组 分页查询 常用函数的使用 统计(CASE WHEN等) 第三部分 高级SQL的编写 MERGE INTO 第三部分 高级SQL的编写 JOIN 第三部分 高级SQL的编写 JOIN 第三部分 高级SQL的编写 JOIN 第三部分 高级SQL...

    PostgreSQL实现批量插入、更新与合并操作的方法

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争。AWS 的 RDS 两大开源数据库就是 MySQL(Aurora 和 MariaDB 是它的变种) 和 PostgreSQL。...

    merge_row_count:一个简单的实用程序,允许对由 Oracle 中的合并操作插入更新删除的行进行计数

    合并行数 一个简单的实用程序 PL/SQL 包,允许对 Oracle 中的合并操作插入/更新/删除的行进行...INSERT INTO emp SELECT rownum AS id, ' emp ' || rownum AS first_name FROM DUAL CONNECT BY LEVEL <= 50 ; C

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    优化 `Insert Into Ignore` 语句性能,提升 10 倍以上 优化 `Insert On Duplicate Key Update` 语句性能,提升 10 倍以上 下推更多的数据类型和函数到 TiKV 计算 优化 `Load Data` 性能,提升 10 倍以上 支持对...

    Oracle OCP认证考试

    1. You need to load information about new customers from the NEW_CUST table into the tables CUST and CUST_SPECIAL. If a new customer has a credit limit greater than 10,000,...

    SQL培训第一期

    属性不依赖于其它非主属性,确保数据表中的每一列数据都和主键直接相关,而不能间接相关,即要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 1.5.3.2 举例 党员表 党员Id 党员姓名 组织Code 符合3NF ...

    SQL写法—数据修改

    条件 INSERT ALL 当使用ALL关键字时,oracle会从上至下判断每一个条件,当条件满足时就执行后面的into语句,merge语句最多可以支持两个when matched 子句

    FlexLabs.Upsert:FlexLabs.Upsert是一个库,通过其各自的本机SQL语法为实体框架的通用数据库提供程序提供了UPSERT功能

    在PostgreSQL / Sqlite中使用INSERT … ON CONFLICT DO UPDATE ,在SqlServer中使用MERGE和INSERT INTO … ON DUPLICATE KEY UPDATE在MySQL中INSERT INTO … ON DUPLICATE KEY UPDATE 。 还支持注入sql命令运行...

    Oracle事例

    insert into TABLENAME@DBLNKNAME (a,b) values (va,vb); update TABLENAME@DBLNKNAME set a=\'this\'; delete from TABLENAME@DBLNKNAME; 怎样执行远程的内嵌过程 begin otherdbpro@to_html(参数); end; ...

    基于SpringMVC+mybaits+Maven+anguljs+html5+mysql+nodejs集成的大数据地产项目

    模拟数据sql列子 (客户cstGUID = 321097)为列子 insert into cst_customer_7 (cstGUID, cstName, gender, birthDate, cstType, cardType, cardID, mobileTel, officeTel, homeTel, sourceApp, sourceBiz, ...

Global site tag (gtag.js) - Google Analytics