`
zhaohaolin
  • 浏览: 1004292 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MYSQL删除重复记录(此处有正解)

阅读更多

有关mysql删除重复记录的方法,我在网上看到很多文章,很多是照抄的,我自己按网上的方法实验了一下,没有一个sql语句就能解决的方法,不知道有没有高手可以出招。
我试验的过程如下:
 
mysql> select * from duplicate;
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  2 | wang  |
|  3 | wdang |
|  4 | wdang |
|  5 | wdand |
|  6 | wddda |
+----+-------+
6 rows in set (0.00 sec)
select * from duplicate where id in(select min(id) from duplicate group by name);
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  3 | wdang |
|  5 | wdand |
|  6 | wddda |
+----+-------+
4 rows in set (0.01 sec)
mysql> delete from duplicate where id not in(select min(id) from duplicate group by name);
ERROR 1093 (HY000): You can't specify target table 'duplicate' for update in FROM clause
 
最后我用了笨办法,复制无重复记录到新表格,删除旧表格,然后重命名新表格为旧表名称。
 
mysql> select * from duplicate where id in(select min(id) from duplicate group by name);
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  3 | wdang |
|  5 | wdand |
|  6 | wddda |
+----+-------+
4 rows in set (0.01 sec)
mysql> create table duplica select * from duplicate where id in(select min(id) from duplicate group by name);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0
mysql> drop table duplicate;
Query OK, 0 rows affected (0.01 sec)
mysql> alter table duplica rename to duplicate;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from duplicate;
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  3 | wdang |
|  5 | wdand |
|  6 | wddda |
+----+-------+
4 rows in set (0.00 sec)
 
mysql> alter table duplicate modify id int(2) not null primary key auto_increment;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
 
后来想了一个语句搞定了:
mysql> use mysql
Database changed
mysql> select * from duplicate;
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  3 | wdang |
|  5 | wdand |
|  6 | wddda |
|  2 | wang  |
|  4 | wdang |
+----+-------+
6 rows in set (0.00 sec)
mysql> delete duplicate as a from duplicate as a,
    -> (
    -> select * from duplicate group by name having count(1)>1) as b
    -> where a.name=b.name and a.id > b.id;
Query OK, 2 rows affected (0.00 sec)
mysql> select * from duplicate;
+----+-------+
| id | name  |
+----+-------+
|  1 | wang  |
|  3 | wdang |
|  5 | wdand |
|  6 | wddda |
+----+-------+
4 rows in set (0.00 sec)
文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/7_databases/mysql/Mysqljs/20100710/399218.html

分享到:
评论

相关推荐

    sqlserver 删除重复记录处理(转)

    注:此处“重复”非完全重复,意为某字段数据重复 HZT表结构 ID int Title nvarchar(50) AddDate datetime 数据 一. 查找重复记录 1. 查找全部重复记录 Select * From 表 Where 重复字段 In (Select ... 删除重复记录

    MySQL命令大全

    MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,同时设置相应的权限;二是通过GRANT命令创建具有某种权限的用户。其中GRANT的常用用法如下: grant all on mydb...

    Mysql下自动删除指定时间以前的记录的操作方法

    在MySQL数据库中,有时我们需要定期清理过期的数据,例如删除指定时间以前的记录。这通常可以通过Event Scheduler来实现,这是一个内置的时间触发器系统,类似于Linux的cron任务,它允许我们设置定时执行的任务,如...

    SqlServer2005中使用row_number()在一个查询中删除重复记录的方法

    在SQL Server 2005中,当我们面临一个表中存在重复记录的问题时,可以采用`ROW_NUMBER()`函数结合子查询来有效地删除这些重复数据。`ROW_NUMBER()`是SQL Server中的一个窗口函数,它为每个分组内的行提供一个唯一的...

    基于Java+MySQL实现(Web)餐厅订餐系统【100011492】

    增删改查员工信息、食物信息:实现方法与餐厅信息类似,此处不再赘述。 添加套餐信息:添加套餐时需要添加套餐组成信息,同时需要修改套餐表以及套餐组成表。 增删改查套餐组成信息:前端向后端发送请求,后端接收到...

    ETL功能1

    14. **去重复数据组件**:去除具有相同关键字的重复记录。 15. **压缩与解压组件**:处理数据的压缩和解压缩。 16. **比较组件**:通过字段比较两个文件,标识差异记录。 17. **分割组件**:根据字段值条件将文件...

    SQL语句练习--数据库

    - **知识点解析:** 使用`DISTINCT`关键字去除重复记录。 10. **查询选修C01课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列:** - **SQL语句:** ```sql SELECT Sno...

    2021-2022计算机二级等级考试试题及答案No.10551.docx

    - **删除记录**:在 Access 中删除记录可以通过多种方式实现,但“文件”菜单中并没有“删除记录”命令,因此选项 B 错误。 - 正确的做法是:选择要删除的记录后,按下 Delete 键或右键选择“删除记录”。 ### ...

    基于PHP的图片资源管理系统源码.zip

    源码可能使用MySQL或其他SQL数据库,包含图片元数据(如标题、描述、上传时间等)的表结构设计是系统功能实现的基础。需要理解SQL查询、事务处理以及数据库优化技巧。 4. **文件上传与管理**:系统需要处理图片的...

    2021-2022计算机二级等级考试试题及答案No.11313.docx

    这个方法是专门用于绘制组件内容的,调用绘图方法在此处进行,以绘制各种图形。 3. 结构化程序设计强调使用顺序、选择(分支)和重复(循环)三种基本结构,不包括GOTO跳转。GOTO语句通常被认为是不良编程实践,...

    2021-2022计算机二级等级考试试题及答案No.17251.docx

    在大多数数据库管理系统中,`DELETE` 命令用于删除记录,但这些记录通常仍保留在数据库中,直到执行 `PACK` 命令时才会被物理删除。 **正确选项**:B. DELETE;PACK #### Windows操作系统特性 - **知识点解析**...

    2021-2022计算机二级等级考试试题及答案No.12339.docx

    - **转换规则**: 将十进制数除以2,记录余数,然后再将商继续除以2,重复此步骤直到商为0为止。最后将所有余数倒序排列即得到对应的二进制数。 - **正确答案**: 正确 #### 14. Word软件介绍 - **知识点**: ...

    Try2php CMS网站系统程序 v1.01

    19.删除下载记录时,对应的文件不会被删除,若要删除对应文件,请您在对应目录下手动删除。 20.浏览文章或下载记录时,只要点击要修改项的名称或内容就可以开始修改点击的项目了。点击“更新内容”完成修改。 21....

    2021-2022计算机二级等级考试试题及答案No.15737.docx

    19. 在MySQL中,删除事件通常使用`DROP EVENT`语句。 20. VFP环境下的LISTSTRU命令显示的是表中每个记录的长度总计,而用户实际可用字段的总宽度应该是通过COUNT命令计算得出。 21. Python面向对象编程(OOP)包括...

    2021-2022计算机二级等级考试试题及答案No.3576.docx

    - **解释**: 触发器是一种特殊类型的存储过程,当特定事件(如插入、删除或更新记录)发生时自动执行。 ### 报表每页头部的打印 - **知识点**: 报表每页头部打印的内容位于 **页面页眉** 区域。 - **解释**: 页面...

    2021-2022计算机二级等级考试试题及答案No.12624.docx

    - **解析**:主键是为了确保表中的记录唯一性而设置的字段,它不允许有重复值。 #### 题目10:IE浏览器的定义 - **知识点概述**:考查了IE浏览器的基本功能。 - **解析**:IE(Internet Explorer)是一种Web页面...

    2021-2022计算机二级等级考试试题及答案No.13357.docx

    - **题目**: 对于自由表而言,不允许有重复值的索引是_______。 - A. 主索引 - B. 候选索引 - C. 普通索引 - D. 唯一索引 - **正确答案**: B - **解析**: 候选索引是自由表中唯一且不允许重复的索引类型,但不是...

Global site tag (gtag.js) - Google Analytics