删除数据表内重复数据的常规顺序是:创建备份、确定重复记录、编写删除语句
方法一: 借助 inner join
delete t1 from table t1 inner join table t2 where t1.id < t2.id and t1.column1 = t2.column1;
table
是表名,id
是表的唯一标识符,column1
是想要根据其删除重复记录的列。这条sql语句会删除column1
列中具有相同值的所有记录,除了id
最大的那一条记录。- 工作方式是,它会为表中的每个重复的
column1
值找到id
值最小的记录,并将其删除。这样,只有id
值最大的记录会被保留下来。
注:在执行操作之前,务必备份数据,以防万一。
方法二: 借助 group by
delete from your_table where id not in ( select max(id) from your_table group by column1, column2, ... /* 列出用于判断重复的列 */ );
- 这条语句会保留每组重复记录中的最大的
id
,并删除其他重复记录。column1
,column2
为用来判断重复的列名。
注:在执行操作之前,务必备份数据,以防万一。
方法三:借助 临时表
如果数据量很大,删除重复数据可以采用创建临时表的方式,效率更高。
步骤:
1.创建一个新的临时表,并将去重后的数据插入到新表中。
create table new_table as select * from old_table group by column_to_be_deduplicated;
在这里,new_table
是新创建的临时表的名字,old_table
是原来的表名,column_to_be_deduplicated
是需要去重的列名。
2.删除原来的表/修改原来的表名
drop table old_table;
rename table old_table to old_table_bak;
将新的临时表重命名为原来的表名。
rename table new_table to old_table;
这种方式是先将去重后的数据插入到一个新的临时表,然后删除旧的表/修改旧表的名字,最后将临时表重命名为旧表的名字,好处是在处理大量数据时,效率会更高。
在第二步的时候不建议采用直接删除旧表的方式,凡是涉及到数据变动的,均需万分谨慎。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论