翼度科技»论坛 编程开发 mysql 查看内容

MySQL如何删除mysql数据表内的重复数据

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
删除数据表内重复数据的常规顺序是:创建备份、确定重复记录、编写删除语句

方法一: 借助 inner join
  1. DELETE t1 FROM table t1
  2. INNER JOIN table t2
  3. WHERE t1.id < t2.id AND t1.column1 = t2.column1;
复制代码

    1. table
    复制代码
    是表名,
    1. id
    复制代码
    是表的唯一标识符,
    1. column1
    复制代码
    是想要根据其删除重复记录的列。这条SQL语句会删除
    1. column1
    复制代码
    列中具有相同值的所有记录,除了
    1. id
    复制代码
    最大的那一条记录。
  • 工作方式是,它会为表中的每个重复的
    1. column1
    复制代码
    值找到
    1. id
    复制代码
    值最小的记录,并将其删除。这样,只有
    1. id
    复制代码
    值最大的记录会被保留下来。
注:在执行操作之前,务必备份数据,以防万一。

方法二: 借助 group by
  1. DELETE FROM your_table
  2. WHERE id NOT IN (
  3.     SELECT MAX(id)
  4.     FROM your_table
  5.     GROUP BY column1, column2, ... /* 列出用于判断重复的列 */
  6. );
复制代码

  • 这条语句会保留每组重复记录中的最大的
    1. id
    复制代码
    ,并删除其他重复记录。
    1. column1
    复制代码
    ,
    1. column2
    复制代码
    为用来判断重复的列名。
注:在执行操作之前,务必备份数据,以防万一。

方法三:借助 临时表

如果数据量很大,删除重复数据可以采用创建临时表的方式,效率更高。
步骤:
1.创建一个新的临时表,并将去重后的数据插入到新表中。
  1. CREATE TABLE new_table AS
  2. SELECT * FROM old_table
  3. GROUP BY column_to_be_deduplicated;
复制代码
在这里,
  1. new_table
复制代码
是新创建的临时表的名字,
  1. old_table
复制代码
是原来的表名,
  1. column_to_be_deduplicated
复制代码
是需要去重的列名。
2.删除原来的表/修改原来的表名
  1. DROP TABLE old_table;
复制代码
  1. RENAME TABLE old_table TO old_table_bak;
复制代码
将新的临时表重命名为原来的表名。
  1. RENAME TABLE new_table TO old_table;
复制代码
这种方式是先将去重后的数据插入到一个新的临时表,然后删除旧的表/修改旧表的名字,最后将临时表重命名为旧表的名字,好处是在处理大量数据时,效率会更高。
在第二步的时候不建议采用直接删除旧表的方式,凡是涉及到数据变动的,均需万分谨慎。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/database/319097nqz.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
来自手机

举报 回复 使用道具