如何在MySQL中查询和删除重复记录?

写在前面最近,一个小伙伴出去接受采访。

面试官问这个问题:如何在MySQL中查询和删除重复记录?我相信,对于这样的问题,许多小伙伴将无所适从。

那么,我们如何完美地回答这个问题呢?今天,我们将一起讨论这个经典的MySQL面试问题。

问题分析标题中对问题有两种理解。

第一个被理解为将标题问题分为两个问题,即:如何在MySQL中查询重复记录?如何删除MySQL中的重复记录?另一个理解是:如何在MySQL中查询和删除重复记录?没关系,无论您如何理解,我们今天都必须对其进行修复! !为了让朋友更好地了解如何解决实际工作中遇到的类似问题。

在这里,我将不只是回答标题问题,而是在各种情况下使用SQL语句查询和删除MySQL数据库中的重复记录。

解决问题的方法查找重复记录1.从表中查找所有重复记录select *,其中重复字段在其中(通过具有count(*)> 1的重复字段从表组中选择重复字段)2.过滤重复记录(仅显示一个)选择*来自HZT,其中ID为In(按标题从HZT组中选择max(ID))注意:此处显示具有最大ID的记录。

删除重复记录1.删除所有重复记录(谨慎使用),删除表中的重复字段(通过具有count(*)> 1的重复字段从表组中选择重复字段)2.保留一个(大多数人应该这样做)需要)的^ _ ^)删除ID不在的HZT(通过标题从HZT组中选择max(ID))注意:ID的最大记录保留在此处。

3.示例1.在表中找到多余的重复记录。

根据单个字段(peopleId)select *从其中的peopleId所在的人员中判断重复记录(根据具有count(peopleId)> 1的peopleId从人员组中选择peopleId)2.删除基于以下内容判断表中的冗余重复记录:单个字段(peopleId),并且只有具有最小rowid的记录仍会从人中删除,其中peopleId在(从具有count(peopleId)> 1的peopleId从人组中选择peopleId)和不在(从中选择min(rowid)的人)中按具有计数(peopleId)> 1的peopleId分组的人员。

3.在表(多个字段)中查找冗余重复记录,从vita中选择* a,其中(a.peopleId,a.seq)在(从vitae组中选择peopleId,seq)按peopleId,seq的count(*)> 1)。

4.删除表中的冗余重复记录(多个字段),仅将行ID最小的记录从vita中删除,其中(.peopleId,a.seq)在(按编号(*)> 1从维生素组中选择人编号,维生素序列)和不在(s中的rowid按peopleId从维生素组中选择min(rowid),seq的count(*)> 1)5.在表中查找多余的重复记录(多个字段),不包括从a中具有最小rowid select *的记录其中(a.peopleId,a.seq)在(按个人编号从vita group中选择peopleId,seq)中,具有count(*)> seq 1)和rowid不在(通过peopleId,seq具有count(*)> 1从vitae组中选择min(rowid))4.补充两个以上的重复记录,一个是完全重复的记录,即一条记录其中所有字段都重复,其中两个重复。

这是一条记录,其中重复了一些关键字段,例如,重复了Name字段,而不必重复某些其他字段,或者可以忽略所有重复的字段。

对于第一种重复,更容易解决。

使用tableName中的select different *获得没有重复记录的结果集。

如果表需要删除重复的记录(剩余1条重复的记录),则可以按以下方式将其删除:从tableNamedrop表的#Tmp中选择distinct * *从#Tmpdrop表#Tmp的tableName中选择*没有设计。

如果每周生成一个唯一的索引列,则可以解决此问题。

2.这种重复性问题通常需要将第一条记录保留在重复记录中。

操作方法如下。

假设重复的字段是“名称”和“地址”,则需要获取这两个字段的唯一结果集,将“ identity(int,1,1)”作为autoID,*从tableName中选择到#Tmp中,然后选择“ min(autoID)”作为在#中的autoID来自#Tmp组的Tmp2按名称,来自#Tmp的autoIDselect *,其中的autoID输入(从#tmp2选择autoID)我特别推荐一种高质量的内容共享架构+算法。

如果您没有关注,则可以长按以关注它:长按以订阅更多令人兴奋的内容▼如果有任何结果,请单击此处查看,衷心感谢您的免责声明:本文内容在经21ic授权,版权归原作者所有。

该平台仅提供信息存储服务。

文章只代表