本文作者:kris

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

kris 2025-01-19 20:42:05 2
一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询摘要: mysql数据库中怎么删除重复的数据?1. 查询需要删除的记录,会保留一条记录。 select a.id,a.subject,a.RECEIVER from test1 a lef...

mysql数据库中怎么删除重复的数据?

1. 查询需要删除的记录,会保留一条记录。 select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id

mysql很多重复的sql怎么处理?

为了处理MySQL中的重复SQL,我们可以通过使用存储过程、函数或视图来避免重复的SQL代码。另外,可以利用索引和优化查询语句来提高数据库性能,减少重复查询。

另外,可以考虑使用ORM框架来帮助管理SQL查询,以及将常用的SQL查询语句封装成可重用的方法。最后,通过对数据库的结构进行优化,避免冗余数据的存在,也能有效减少重复的SQL查询。

MySQL数据库如何删除重复数据?

楼主的问题是如何删除重复数据仅保留其中一条,接下来就介绍一下如何实现该需求。

数据准备

示例表 Student_Information 如下 :

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询


我们插入一部分数据到该表,其中存在多条姓名为 Anaa 的手机号码重复数据,如下:

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询


入库后数据如下:

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询


设计删除SQL

我们通过Group by对手机号进行分组,然后计算每组最大ID作为保留数据,然后删除其他数据。SQL设计如下:

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

执行该SQL,结果如下:

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

我们可以看到,该SQL删除了重复的数据时,并且保留了id最大的数据(最新数据)。


设计该SQL时需要注意什么?

我们需要注意,使用 MySQL 进行 Delete From 操作时,若子查询的 FROM 字句和更新、删除对象使用同一张表时,会出现"You can't specify target table for update in FROM clause”。错误。

比如,我们设计如下SQL,该SQL从语法来看也是实现删除 Student_Information 表重复数据,我们执行一下看下结果。

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

执行结果如下,我们可以看到抛出了"You can't specify target table for update in FROM clause”错误,那么该如何解决呢?

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

解决这个问题的方法也很简单,就是将 select 出的结果通过中间表再 select 一遍即可,如下:

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询



Mysql如何去掉数据库中的重复记录?

很简单 通过id删除

DELETE

FROM

table_name AS ta

WHERE

ta.唯一键 <> (

SELECT

t.maxid

FROM

( SELECT max( tb.唯一键 ) AS maxid FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 ) t

);

从mysql数据库删除重复记录只保留其中一条

这两天做了一个调用第三方接口的小程序,因为是实时更新数据,所以请求接口的频率就很高,这样有时会出现往数据库插入重复的数据,对数据库造成压力也不方便管理,因为要通过原生sql语句,解决数据库的去重问题.在过程中遇到了麻烦,最终解决了分享出来。

要删除重复的记录,就要先查出重复的记录,这个很容易做到

select * from cqssc group by expect having count(expect) > 1

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

注意:这是查出所有重复记录的第一条记录,需要保留,因此需要添加查询条件,查出这三条的重复记录

select id,expect from cqssc where expect in (select expect from cqssc group by expect having count(expect)>1)

and id not in(select min(id) from cqssc group by expect having count(expect)>1)

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

以上得到的结果就是我们需要删除的记录!

下面是我最初做错的地方,既然要删除,可能都会想到这样很简单了

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

报错了!!!在Mysql中是不能删除查询出来的记录的,这里很容易错,当时在这里纠结了很久,而是要通过一张临时表来解决。

delete from cqssc where id in (select id from (select id from cqssc where expect in

(select expect from cqssc group by expect having count(expect)>1) and id not in

(select min(id) from cqssc group by expect having count(expect)>1)) as tmpresult)

再运行试试

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

删除成功,最后再查询一下看是否还有重复记录

一次现场mysql重复记录数据的排查处理实战记录-mysql 重复记录查询

可以戳原文看看:

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/24958.html发布于 2025-01-19 20:42:05
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享