mysql merge用法详解_SQLServer之merge函数用法_MySQL

MERGE 目标表

USING 源表

ON 匹配条件WHEN MATCHED THEN

语句WHEN NOT MATCHED THEN

语句;

其中最后语句分号不可以省略,且源表既可以是一个表也可以是一个子查询语句WHEN NOT MATCHED BY TARGET

表示目标表不匹配,BY TARGET是默认的,所以上面我们直接使用WHEN NOT MATCHED THENWHEN NOT MATCHED BY SOURCE

表示源表不匹配,即目标表中存在,源表中不存在的情况。

主要用法:

merge无法多次更新同一行,也无法更新和删除同一行

当源表和目标表不匹配时:

若数据是源表有目标表没有,则进行插入操作

若数据是源表没有而目标表有,则进行更新或者删除数据操作

当源表和目标表匹配时:

进行更新操作或者删除操作

when matched 这个子句可以有两个,当有两个时,第一个子句必须是when matched and condition且两个matched子句只会执行一个,且两个子句必须

是一个update和一个delete操作

when not matched by source和上面类似merge icr_codemap_bak as a

using icr_codemap as b

on a.COLNAME = b.COLNAME and a.ctcode = b.ctcode

when matched and b.pbcode <> a.pbcode

then update set a.pbcode = b.pbcode

when not matched

then insert values(b.colname,b.ctcode,b.pbcode,b.note)

;

可以比对字段不一致进行更新

https://technet.microsoft.com/zh-cn/library/bb510625.aspx 这个是MSDN的网址

在 Merge Matched 操作中,只能允许执行 UPDATE 或者 DELETE 语句。

在 Merge Not Matched 操作中,只允许执行 INSERT 语句。

一个 Merge 语句中出现的 Matched 操作,只能出现一次 UPDATE 或者 DELETE 语句,否则就会出现下面的错误 - An action of type 'WHEN MATCHED' cannot appear more than once in a 'UPDATE' clause of a MERGE statement.

Merge 语句最后必须包含分号,以 ; 结束。

以上就是SQLServer之merge函数用法_MySQL的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
出现该问题可能是因为 MyBatis 对于 MySQLMerge 语法的支持不太好。你可以尝试在 MyBatis 的配置文件中加入下面的配置: ```xml <settings> <setting name="useGeneratedKeys" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="aggressiveLazyLoading" value="false"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useCacheStatements" value="true"/> <setting name="cacheEnabled" value="true"/> <setting name="defaultStatementTimeout" value="25000"/> <setting name="defaultFetchSize" value="100"/> <setting name="lazyLoadingEnabled" value="false"/> <setting name="callSettersOnNulls" value="false"/> <setting name="logImpl" value="LOG4J"/> <setting name="configurationFactory" value="com.xxx.xxx.MybatisConfigurationFactory"/> <setting name="defaultScriptingLanguage" value="com.xxx.xxx.CustomLanguageDriver"/> </settings> ``` 其中,`CustomLanguageDriver` 是自定义的 MyBatis 语言驱动,可以通过继承 `XMLLanguageDriver` 实现。在自定义的语言驱动中,你可以重写 `merge()` 方法来实现 MySQLMerge 语法。 另外,你还需要在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> ``` 这是集成了 Druid 连接池的依赖。你需要在 MyBatis 的配置文件中配置 Druid 连接池。例如: ```xml <dataSource type="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="maxActive" value="20"/> <property name="initialSize" value="1"/> <property name="maxWait" value="60000"/> <property name="minIdle" value="1"/> <property name="validationQuery" value="SELECT 1 FROM DUAL"/> <property name="testOnBorrow" value="false"/> <property name="testOnReturn" value="false"/> <property name="testWhileIdle" value="true"/> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <property name="minEvictableIdleTimeMillis" value="25200000"/> <property name="filters" value="stat,wall"/> <property name="connectionProperties" value="druid.stat.mergeSql=true"/> </dataSource> ``` 注意,最后一行的 `druid.stat.mergeSql=true` 是用来开启 Druid 的 Merge SQL 统计功能的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值