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

Mysql去除重复记录

阅读更多
转自51CTO    URL:http://dadloveu.blog.51cto.com/715500/196309/

有关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)
分享到:
评论

相关推荐

    MySQL删除重复记录

    MySQL作为最受欢迎的关系型数据库管理系统之一,提供了多种功能来处理数据,包括如何有效地删除重复记录。本文将深入探讨MySQL中删除重复记录的方法,以及如何利用其特性来优化数据管理流程。 ### MySQL删除重复...

    删除数据表中重复记录

    本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...

    mysql删除重复记录语句的方法

    ### 方法1:基于`NOT IN`子句删除重复记录 这种方法通过找出每个重复组中最大`id`的记录保留下来,删除其他非最大`id`的记录。SQL语句如下: ```sql DELETE FROM YourTable WHERE id NOT IN (SELECT MAX(id) FROM ...

    MySQL中查询、删除重复记录的方法大全

    本文主要给大家介绍了关于MySQL中查询、删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as count from user_table group by title having ...

    MySQL 查询重复内容只显示一条

    4. **删除重复数据**:如果你希望彻底删除重复数据,只保留一条,可以使用`DISTINCT`关键字创建一个新的表,或者使用`DELETE`语句结合子查询。但请注意,删除操作应谨慎进行,以免丢失重要信息。例如: ```sql ...

    mysql彻底理解删除重复记录sql脚本,只保留一条记录

    mysql彻底理解删除重复记录sql脚本,只保留一条记录

    通过存储过程删除Mysql数据库表中的重复记录.pdf

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...

    mysql优化小技巧之去除重复项实现方法分析【百万级数据】

    本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...

    MySQL 去除重复数据实例详解

    MySQL 去除重复数据实例详解 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键字去重,几乎所有...

    Delphi自动删除数据库中重复记录..rar

    这个示例中的 `RemoveDuplicates` 函数接受一个 TDataSet 类型的参数,遍历数据集并删除重复记录。请注意,实际使用时,应考虑事务处理以确保数据一致性,同时可能需要添加错误处理机制来处理可能出现的异常。 ...

    MySQL DELETE 删除语句加锁分析1

    这种情况下,MySQL会锁定所有匹配的主键记录,确保删除操作的原子性。 8. 非唯一索引删除已标记为删除的记录: 如果记录已被标记为删除,但物理上仍然存在,删除操作依然会锁定这些记录。 9. 唯一索引删除已标记...

    mysql删除重复行的实现方法

    本文将详细讲解如何在MySQL中删除重复行,以确保数据的唯一性。 首先,我们要创建一个示例表`relation`,用于演示删除重复行的操作。这个表包含两个字段:`userId` 和 `fanId`,它们共同构成数据的唯一标识。创建表...

    删除mysql数据库中的重复数据记录

    以下是一个具体的步骤,演示如何在MySQL中删除重复的数据记录,特别是针对`test`数据库中`title`字段的重复记录。 首先,创建一个临时表`bak`,用于存储不重复的记录。这里使用的SQL语句是: ```sql CREATE TABLE ...

    mysql查找删除重复数据并只保留一条实例详解

    本文将详细介绍如何在MySQL中查找并删除重复数据,同时只保留其中一条,具体以实例进行解析。 首先,假设我们有一个名为`test`的表格,包含以下字段:`school_id`、`school_name`、`total_student`和`test_takers`...

    Mysql删除重复的数据 Mysql数据去重复

    本文将详细介绍如何在MySQL中查询和删除重复的数据。 首先,查询重复数据是第一步。在MySQL中,可以使用`GROUP BY`和`HAVING`子句来找出重复的记录。例如,如果我们有一个`employee`表,包含`emp_name`(员工姓名)...

Global site tag (gtag.js) - Google Analytics