如何实现 MySQL 删除重复记录并且只保留一条

如题所述

阅读本文大概需要 4 分钟。

作者:千 gblog.csdn.net/n950814a...

最近在做题库系统,由于在题库中添加了重复的试题,所以需要查询出重复的试题,并且删除掉重复的试题只保留其中1条,以保证考试的时候抽不到重复的题。首先写了一个小的例子:

这是数据库中的表:

查看是否有重复的数据:

查询出:根据dname分组,同时满足having字句中组条件表达式(重复次数大于1)的那些组count(*)与count(1) 其实没有什么差别,用哪个都可以count(*)与count(列名)的区别:

count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入)。

1. 查询全部重复的数据

2. 删除全部重复试题

将上面的查询select改为delete(这样会出错的)

会出现如下错误:[Err] 1093 - You can't specify target table 'dept' for update in FROM clause

原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不支持这种更新查询同一张表的操作解决办法:把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。

3. 查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)a. 第一种方法

上面这种写法正确,但是查询的速度太慢,可以试一下下面这种方法:

b. 第二种方法

根据dname分组,查找出deptno最小的。然后再查找deptno不包含刚才查出来的。这样就查询出了所有的重复数据(除了deptno最小的那行)。

c. 补充第三种方法

4. 删除表中多余重复试题并且只留1条a. 第一种方法:b. 第二种方法(与上面查询的第二种方法对应,只是将select改为delete)c. 补充第三种方法(评论区推荐的一种方法)

二、多个字段的操作

单个字段的如果会了,多个字段也非常简单。就是将group by 的字段增加为你想要的即可。 此处只写一个,其他方法请仿照一个字段的写即可。

总结

其实上面的方法还有很多需要优化的地方,如果数据量太大的话,执行起来很慢,可以考虑加优化一下:
温馨提示:内容为网友见解,仅供参考
无其他回答

mysql删除重复数据,保留一条
1. 确定需要去除重复数据的表和列。2. 使用DISTINCT或GROUP BY语句查找重复记录。3. 使用DELETE语句结合子查询删除重复数据。确定需要操作的表和列 首先,你需要明确哪张表中有重复数据,以及是基于哪些列来判断重复的。例如,假设你有一个名为`students`的表,其中的`name`和`age`列有重复数据,那么...

mysql删除重复数据,保留一条
在MySQL中,要删除表dep中的重复数据并保留每组中的唯一记录,可以使用以下SQL语句:首先,使用子查询找到每个id的最高值,即每个重复组中的最后一个记录。子查询是:(select max(id) from dep group by id having count(id) > 1)然后,外部查询会删除id不在这个子查询结果中的所有记录。完整的删除...

MySQL达到一亿数据如何去重复mysql一亿数据去重复
1. 数据导入前去重 在执行数据导入之前,我们可以使用以下方式扫描数据,去除重复记录。1.1 数据库索引去重 以下代码片段可以在MySQL中使用,以检查数据表的重复数量:SELECT COUNT(*) FROM 数据表 GROUP BY 列名 HAVING COUNT(*) > 1;使用以下代码可以将重复的数据删除,并保留唯一数据。ALTER IGNORE ...

如何实现 MySQL 删除重复记录并且只保留一条
1. 查询全部重复的数据 2. 删除全部重复试题 将上面的查询select改为delete(这样会出错的)会出现如下错误:[Err] 1093 - You can't specify target table 'dept' for update in FROM clause 原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新了这个表,可以理解为死锁。mysql不...

如何在MySQL中去除重复数据mysql不显示重复
这个方法使用两个嵌套的SELECT语句,首先我们查询出所有重复的记录,然后在DELETE语句中删除这些记录。这个方法不会改变表的结构,但却可以更彻底地去除重复数据。4.使用UNIQUE索引 索引是MySQL中一种用于提高查询效率的数据结构。我们可以使用UNIQUE索引来限制表中某一列的值必须唯一,从而实现去重的效果。例如...

MySQL之查询重复记录、删除重复记录方法大全
\\ 1、对于第一种重复,比较容易解决,使用\\ select distinctfrom tableName\\ 就可以得到无重复记录的结果集。\\ 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除\\ select distinctinto #Tmp from tableName\\ drop table tableName\\ select * into tableName from #Tmp\\ drop table...

MySQL 如何查找并删除重复记录
通常,保留其中一条记录即可。使用 DELETE FROM 语句可以实现删除,通过连接找出需要删除的记录。若要删除 email 重复的记录,可以只保留其中一条。如果需要保留 id 最小的数据,可使用子查询找出需要保留的数据,并删除其他数据。使用中间表也可以删除重复数据。在使用 create table ... like 语句时,...

MySQL数据去重技巧助力数据管理与分析mysql中去重复性
该语句将删除表table1中所有重复的name列数据,保留每个name数据的最后一条信息。我们可以适当地更改WHERE子句来保留每个name数据的第一条信息。方法5:使用INSERT INTO语句和ON DUPLICATE KEY UPDATE子句 ON DUPLICATE KEY UPDATE子句是一个关键字子句,可以确保在插入新记录时更新现有记录,以保证数据的唯一...

mysql的sql语句如何去掉重复的数据
2. 删除重复记录,只保留一条记录。注意,subject,RECEIVER 要索引,否则会很慢的。?1 delete a from test1 a, (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 where a.subject=b.subject and a.RECEIVER...

mysql怎么去除重复数据
删除重复数据 如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:from 树懒学堂 - 一站式数据知识平台 当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:

相似回答
大家正在搜