mybatis insert into select 丢失数据!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis insert into select 丢失数据!相关的知识,希望对你有一定的参考价值。

我在使用Mybatis执行insert into select 的时候出现了数据丢失,这是什么情况呢?下面是我的配置:

<!-- 保存15分钟统计数据 -->
<insert id="insertStatisticsData" parameterType="com.nantian.nump.bean.State" >
insert into $indexCode
select t.IP as IP, t.COMPONENT_CODE AS COMPONENT_CODE, $collectTime as COLLECT_TIME, t.INDEX_CODE as INDEX_CODE,
max(t.value) as MAX_VALUE, min(t.value) as MIN_VALUE, cast(avg(cast(t.value as decimal(15,2))) as decimal(15,2)) as AVG_VALUE
from (select d.* from $tabname d, INDEX_ITEM i, MONITOR_UNIT m
where i.INDEX_CODE = (case locate('-', d.index_code) when 0 then d.index_code else substr(d.index_code, 1, locate('-', d.index_code)-1) end)
and i.UNIT_ID = m.UNIT_ID and i.CLASS_ID = m.CLASS_ID
and m.CHART_TYPE <> '0'
and collect_time < #value and collect_time >= #componentCode) t
group by t.IP, t.COMPONENT_CODE, t.INDEX_CODE
</insert>

执行之后插入的数据比实际查询出来的少了几十条,数据是没有问题的,所有字段都是字符串,并且长度一致也没有超限。主键不冲突(如11.129.163.65和11.129.163.66,这其中有条数据就丢失了)。执行过程中没有出现异常。

请各位大神帮忙看看,谢谢!非常感谢。

参考技术A 语句本身确实没有问题,是不是少/多了结尾的分号 有些语言需要这个分号,有些不需要分号追问

您好,我的语句是正常执行了的,只是insert的数据比select出来的数据要少。

本回答被提问者和网友采纳

以上是关于mybatis insert into select 丢失数据!的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常

mybatis 中用insert into select ..... 报错命令未正确结束,但把这句sql放到plsql中执行正常

mybatis的insert返回主键

mybatis 中使用oracle merger into

mybatis自动生成主键

MyBatis SQL映射文件