MySQL|删除mysql数据表内的重复数据记录

本文介绍了三种删除数据表中重复数据的方法:使用INNERJOIN、GROUPBY以及借助临时表。强调了在操作前备份数据的重要性,并针对大数据量情况提供了更高效的临时表去重策略。
摘要由CSDN通过智能技术生成

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

方法一: 借助 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 是需要去重的列名。

  1. 删除原来的表/修改原来的表名
DROP TABLE old_table;
RENAME TABLE old_table TO old_table_bak;
  1. 将新的临时表重命名为原来的表名。
RENAME TABLE new_table TO old_table;
  • 这种方式是先将去重后的数据插入到一个新的临时表,然后删除旧的表/修改旧表的名字,最后将临时表重命名为旧表的名字,好处是在处理大量数据时,效率会更高。
  • 在第二步的时候不建议采用直接删除旧表的方式,凡是涉及到数据变动的,均需万分谨慎。
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在MySQL删除表中的重复数据,可以按照以下步骤进行操作: 1. 创建一个临时表,与原始表具有相同的结构。 2. 使用SELECT语句从原始表中查询出需要更新的数据,并将其插入到临时表中。可以使用GROUP BY和HAVING子句来识别重复记录。 3. 删除原始表中与临时表中的重复记录相对应的行。可以使用DELETE语句和子查询来实现这一步骤。 4. 最后,您可以选择删除临时表。 下面是一个示例SQL语句,用于在MySQL删除表中的重复数据: ``` -- 新增测试表 CREATE TABLE basic_farmer ( id INT(11), user_name VARCHAR(25), id_card INT(11) ); -- 删除重复数据 DELETE FROM basic_farmer WHERE id IN ( SELECT id FROM ( SELECT a.id FROM basic_farmer a LEFT JOIN ( SELECT id_card, MIN(id) id FROM basic_farmer GROUP BY id_card HAVING COUNT(id_card) > 1 ) b ON a.id_card = b.id_card WHERE a.id != b.id ) AS tt ); ``` 请注意,上述SQL语句中的表名和字段名需要根据实际情况进行调整,以适应您的数据库结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL中查询、删除重复记录的方法大全](https://blog.csdn.net/doublepg13/article/details/127613922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySql删除表中重复数据](https://blog.csdn.net/weixin_56567361/article/details/127494879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的小白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值