Mysql删除数据库中重复的数据(多字段判断重复)

来源:互联网 发布:lurker软件多少钱一个 编辑:程序博客网 时间:2024/05/08 16:11

由于网络阻塞,高并发造成生产环境下数据库中的数据重复!!!

#所有的去重是将表中多于的记录去重 只有一条的保留  多条重复记录的话只保留ID最小的一个

#userrecoder表的SQL去重

userrecoder学生使用记录表,多个字段,记录的重复是根据学生的id studentId,模块 module,开始时间 beginTime,分数 score这四个字段,完全相同才能判断是同一个字段的!

可以根据自己的实际情况套用这个SQL,根据自己的业务去判断重复

DELETE
FROM
userrecoder
WHERE
beginTime >= '2017-11-03 15:00:00'
AND id NOT IN (
SELECT
id
FROM
(
SELECT
MIN(id) AS id,
count(studentId) AS count
FROM
userrecoder
WHERE
beginTime >= '2017-11-03 15:00:00'
GROUP BY
studentId,module,beginTime,score
HAVING
count(studentId) >= 1
) m

);

其中 not in 里面的数据是要保留的数据!

网上有的sql的HAVING后面跟的count>1(此处是大坑),注意这样是不对的,如果是count>1这样的话会将原本只有一条的记录删除!!!

还有要注意如果表中的数据有时间限制,要删除某一时间段内的重复数据,一定要在每个范围内加上时间的区间!!!

一般删除操作还是相对危险的,一不小心就会跑路,一定要记得备份!!!

写好的SQL最好在本地模拟数据去删除的试一试!!!

阅读全文
0 0
原创粉丝点击