`
frank1998819
  • 浏览: 758149 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

MySQL 删除重复记录(转)

 
阅读更多

用SQL语句,删除掉重复项只保留一条

在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

  1.  
    SELECT
  2.  
    *
  3.  
    FROM
  4.  
    people
  5.  
    WHERE
  6.  
    peopleId IN (
  7.  
    SELECT
  8.  
    peopleId
  9.  
    FROM
  10.  
    people
  11.  
    GROUP BY
  12.  
    peopleId
  13.  
    HAVING
  14.  
    count(peopleId) > 1
  15.  
    )

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

  1.  
    DELETE
  2.  
    FROM
  3.  
    people
  4.  
    WHERE
  5.  
    peopleName IN (
  6.  
    SELECT
  7.  
    peopleName
  8.  
    FROM
  9.  
    people
  10.  
    GROUP BY
  11.  
    peopleName
  12.  
    HAVING
  13.  
    count(peopleName) > 1
  14.  
    )
  15.  
    AND peopleId NOT IN (
  16.  
    SELECT
  17.  
    min(peopleId)
  18.  
    FROM
  19.  
    people
  20.  
    GROUP BY
  21.  
    peopleName
  22.  
    HAVING
  23.  
    count(peopleName) > 1
  24.  
    )

3、查找表中多余的重复记录(多个字段)

  1.  
    SELECT
  2.  
    *
  3.  
    FROM
  4.  
    vitae a
  5.  
    WHERE
  6.  
    (a.peopleId, a.seq) IN (
  7.  
    SELECT
  8.  
    peopleId,
  9.  
    seq
  10.  
    FROM
  11.  
    vitae
  12.  
    GROUP BY
  13.  
    peopleId,
  14.  
    seq
  15.  
    HAVING
  16.  
    count(*) > 1
  17.  
    )

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

  1.  
    DELETE
  2.  
    FROM
  3.  
    vitae a
  4.  
    WHERE
  5.  
    (a.peopleId, a.seq) IN (
  6.  
    SELECT
  7.  
    peopleId,
  8.  
    seq
  9.  
    FROM
  10.  
    vitae
  11.  
    GROUP BY
  12.  
    peopleId,
  13.  
    seq
  14.  
    HAVING
  15.  
    count(*) > 1
  16.  
    )
  17.  
    AND rowid NOT IN (
  18.  
    SELECT
  19.  
    min(rowid)
  20.  
    FROM
  21.  
    vitae
  22.  
    GROUP BY
  23.  
    peopleId,
  24.  
    seq
  25.  
    HAVING
  26.  
    count(*) > 1
  27.  
    )

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

  1.  
    SELECT
  2.  
    *
  3.  
    FROM
  4.  
    vitae a
  5.  
    WHERE
  6.  
    (a.peopleId, a.seq) IN (
  7.  
    SELECT
  8.  
    peopleId,
  9.  
    seq
  10.  
    FROM
  11.  
    vitae
  12.  
    GROUP BY
  13.  
    peopleId,
  14.  
    seq
  15.  
    HAVING
  16.  
    count(*) > 1
  17.  
    )
  18.  
    AND rowid NOT IN (
  19.  
    SELECT
  20.  
    min(rowid)
  21.  
    FROM
  22.  
    vitae
  23.  
    GROUP BY
  24.  
    peopleId,
  25.  
    seq
  26.  
    HAVING
  27.  
    count(*) > 1
  28.  
    )

6.消除一个字段的左边的第一位:

  1.  
     
  2.  
     
  3.  
    UPDATE tableName
  4.  
    SET [ Title ]= RIGHT ([ Title ],(len([ Title ]) - 1))
  5.  
    WHERE
  6.  
    Title LIKE '村%'
  7.  
     

7.消除一个字段的右边的第一位:

  1.  
     
  2.  
     
  3.  
    UPDATE tableName
  4.  
    SET [ Title ]= LEFT ([ Title ],(len([ Title ]) - 1))
  5.  
    WHERE
  6.  
    Title LIKE '%村'
  7.  
     

8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录

  1.  
    UPDATE vitae
  2.  
    SET ispass =- 1
  3.  
    WHERE
  4.  
    peopleId IN (
  5.  
    SELECT
  6.  
    peopleId
  7.  
    FROM
  8.  
    vitae
  9.  
    GROUP BY
  10.  
    peopleId

可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。

 

1、数据准备

product表数据如下:

 

laptop表数据如下:

 

2、要求:#删除所有不生产打印机厂商生产的笔记本电脑

第一步:对aptop表进行操作

操作没有问题,按照本思路对product表进行操作

产生You can't specify target table '表名' for update in FROM clause错误

 

 

3、问题解决

将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误。

 

需要注意的是,这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题。

 

分享到:
评论

相关推荐

    MySQL删除重复记录

    ### MySQL删除重复记录 在MySQL中,重复记录可能由于各种原因而出现,比如数据导入错误、系统故障或人为操作失误等。这些重复记录不仅浪费存储空间,还可能导致查询结果不准确,因此及时删除它们是非常必要的。 ##...

    删除数据表中重复记录

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

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

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

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

    前者创建了一个新的不含重复记录的表,后者则删除了所有非最小`id`的重复记录。 5. **源码与工具**:标签中的“源码”可能指的是用于实现上述查询的SQL语句,而“工具”可能是指使用MySQL客户端或其他数据库管理...

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

    总结来说,删除MySQL中的重复记录主要依赖于对数据分组(GROUP BY)和聚合函数(COUNT)的运用,以及理解如何通过`JOIN`和`NOT IN`等操作来保留特定的记录。在实际操作时,应根据数据规模和业务需求选择合适的方法,...

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

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

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

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

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

    这个压缩包文件"Delphi自动删除数据库中重复记录.."提供了一个解决方案,可能是通过 Delphi 代码来实现对数据库中重复记录的自动检测和删除。在本文中,我们将深入探讨 Delphi 与数据库交互的基本原理,以及如何编写...

    MySQL DELETE 删除语句加锁分析1

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

    mysql删除重复行的实现方法

    在MySQL数据库管理中,有时我们可能会遇到数据表中存在重复行的情况,这可能会影响数据的准确性和一致性。本文将详细讲解如何在...感谢你对我们的支持,希望这篇文章能对你在处理MySQL删除重复行的问题上有所帮助。

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

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

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

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

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

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

    谈MySQL中重复行的查找删除.pdf

    本文主要探讨了在MySQL中如何查找并删除重复行,这对于维护数据库的整洁性和提高查询效率有着重要的作用。 首先,我们需要明确什么是重复行。在MySQL中,如果表中的某一行与其他行在特定列上的值完全相同,那么这些...

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

    此查询会显示所有不是每个`emp_name`组内最小`emp_id`的记录,这些就是可以被删除的重复记录。 然后,如果决定删除这些重复记录,可以使用`DELETE`语句与上述查询相结合: ```sql DELETE t1 FROM employee t1 ...

    MYSQL删除重复数据的简单方法

    在MySQL中,删除重复数据是一项常见的数据库维护任务。在标题和描述中提到的问题是尝试使用一个SQL查询来删除具有相同值的记录,但遇到了错误。下面将详细解释这个问题,并提供几种有效的方法来处理MySQL中删除重复...

Global site tag (gtag.js) - Google Analytics