# merge.ftl
在merge.ftl文件中构造一个SQL模板,使数据库支持一个将表或SQL查询结果插入或更新到目标表的merge into
语句以及一个将特定values插入或更新到目标表的merge into
语句。
INSERT<#if !(updateFields??)> IGNORE</#if> INTO ${tableName}<#if insertFields??> (${insertFields})</#if>
<#--来源是数据表-->
<#if usingTable??>
SELECT ${insertValues} FROM ${usingTable} ${usingAlias}<#lt>
<#elseif updateFields??><#--来源是sql,且有update列表,因为update列表中需要别名,需要包一层sql-->
SELECT ${insertValues} FROM (<#lt>
${usingSql}<#lt>
) ${usingAlias}<#lt>
<#else>
${usingSql}<#lt>
</#if>
<#--有update-->
<#if updateFields??>ON DUPLICATE KEY UPDATE ${updateFields}</#if>
提示
- 若数据库不支持
merge into
语句,可以配置为类似功能的insert into
语句。 - 若不配置此模板,将默认使用标准的
merge into
语句。
# SQL模板参数
tableName
:目标数据表表名。tableAlias
:目标数据表的别名。insertFields
:插入的字段名列表,此参数不为空。直接引用此参数会输出经过逗号分割的字段名,如field1,field2...
。insertValues
:insertFields字段列表对应的值,引用此参数时的输出格式同insertFields
。updateFields
:当数据已存在时执行的更新,直接引用此参数可以输出对应的字段名和值,如field1=value1,field2=value2...
;如果不存在此参数,表示忽略已存在的数据。usingTable
:数据来源表表名,若此参数存在,表示需要将此表的数据合并到目标表,要求表中的字段名与目标表保持一致。usingSql
:执行merge的数据来源sql,若usingTable
为空,则取这个值的参数。usingAlias
:数据来源表或者sql的别名,此参数不为空。
0条评论
评论