DISTINCT 去重仍有重复的分析
logger日志报错 插入数据时违反主键唯一约束
org.springframework.dao.DuplicateKeyException:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '189378605' for key 'PRIMARY'
### The error may involve com.ccf.springboot.mapper.middle.MiddleMapper.insertSyncBatch-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO sync_batch ( uniqueId, erpId, manufactureDate, effectivityDate, batchNumber, createdDate, modifyDate ) VALUE (?,?,?,?,?,NOW( ),NOW( ) )
初步分析
在这个表中主键uniqueId 不是自增长 而是由erpId和batchNumber合并组成主键id
当有重复的主键id插入时报了这个异常 即插入的数据可能存在数据重复的问题 ok 那么接下来排查下sql 看看原始数据
SELECT DISTINCT
goodsid,
proddate,
v.INVALIDDATE,
lotno
FROM
BMS_ST_qty_LST_GAOXING_V v
WHERE
storageid = 10
在sql中使用了关键字DISTINCT 正常来说不应有重复数据产生 为了排查原因 将报错的erpId 带入本条sql查询(图一中的erpId 对应上图的goodsid)

发现查到数据有2条
接下来去除关键字再试下

发现查到有3条一模一样的数据 这就说明去重关键字实际上有起作用的 但是为什么有一条数据没有去重呢
一番排查后 找到了原因

LOTNO中有一条数据后面存在空串导致 去重关键字没办法去重
解决方案
经上面查证 证实是数据维护的原因 脑海里第一个想法是修改数据 但是考虑到数据有关联的原因 修改并不合适
但假如不修改 将查询到的数据直接插入到sync_batch 还是会报异常
尝试将异常抓起 不予解决 然后记录日志 问题解决
for (SyncBatch erpSyncBatch : erpListSyncBatch) {
if (erpSyncBatch.getFlag() == null) {
try {
middleService.insertSyncBatch(erpSyncBatch);
} catch (DuplicateKeyException e) {
LOGGER.error("违反唯一约束"+erpSyncBatch.getErpId());
}catch (Exception e) {
LOGGER.error(ERROR_SYNC_BATCH,e);
throw new RuntimeException(e);
}
}
}
DISTINCT 去重仍有重复的分析的更多相关文章
- Linq 中的distinct去重
Linq的Distinct和T-Sql的distinct一样,可以将重复的结果集去重注意: 1 distinct去重记录要求每个字段都重复时,才算重复对象,这与sql一样2 distinct语句可以和 ...
- .NET-list扩展方法Distinct去重
原文链接:https://blog.csdn.net/daigualu/article/details/70800012 .NET中list的扩展方法Distinct可以去掉重复的元素,分别总结默认去 ...
- sqlserver中distinct的用法(不重复的记录)
下面先来看看例子: table表 字段1 字段2 id name 1 a 2 b 3 c 4 ...
- mysql distinct 去重
在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count( ...
- (转)mysql自增列导致主键重复问题分析
mysql自增列导致主键重复问题分析... 原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...
- 无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biological replicates
无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biologic ...
- 存储过程系列三:根据表别名方式distinct去重插入
1.根据表别名方式distinct去重插入 insert into GG_XKZ_YLQXSCXKESL_SCDZ ( bzj, xkzid, sqid, jtdz, szsf, ...
- SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用
进入正题,准备我们的测试数据 1.我们要筛选的数据为去除 GX 列的重复项 并将所有数据展示出来,如图所示: ' 2.这种情况下我们是不可以使用DISTINCT来去重的,我们可以来尝试一下: 首先,单 ...
- 扩展lamda表达中distinct按照字段去除重复
首先,我们定义一个Student类来测试. public class Student { public int ID { get; set; } public string Name { get; s ...
随机推荐
- H5分享到微信好友朋友圈QQ好友QQ空间微博二维码
这是分享按钮: <button onclick="call()">通用分享</button> <button onclick="call(' ...
- canvas-菜鸟版画布时钟
这是以前自己练习写的一个画布时钟 <!DOCTYPE html><html lang="en"> <head> <meta charset ...
- ADO.NET Tips
1. SqlCommand.ExecuteScalar Method Executes the query, and returns the first column of the first row ...
- 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...
- SQL Server ->> 生成时间类型的Partition Function和Partition Scheme代码
有时工作中要建个分区函数,可是像日期这种分区函数要是搞个几百个的值那不是要搞死我.于是写了点代码自动生成一个从1990年开始的按月的分区函数和对应的分区主题 USE [TestDB] GO DECLA ...
- 深入浅出 关于SQL Server中的死锁问题
深入浅出 关于SQL Server中的死锁问题 博客2013-02-12 13:44 分享到:我要吐槽 死锁的本质是一种僵持状态,是多个主体对于资源的争用而导致的.理解死锁首先需要对死锁所涉及的相 ...
- 文件读取方法(FileHelpers) z
using System; using System.Collections.Generic; using System.Linq; using System.Text; using FileHelp ...
- 安卓Socket开发注意事项
如果要在安卓app里用到Socket通信,要满足: 1.在写代码的activity里import进Socket相关的包,这个很easy,如果你不知道要import什么包,也可以先不指定,可 ...
- Jmeter入门12 __time函数 jmeter获取当前系统时间
有的接口要传递当前的日期或时间,可以用__time()函数获取当前时间 ${__time()} 当前时间到计算机元年的毫秒数 ${__time(时间格式)} 以预定的格式显示当前时间 请求示例: ...
- php多进程写入文件
测试一 $begin = time(); for ($i=0; $i<10000; $i++) { $fp = fopen("tmp", 'r+'); fseek($fp, ...