MySQL 删除数据库中字段重复的数据

本文介绍两种从数据库中删除重复记录的方法:使用distinct关键字和row_number()窗口函数。通过这两种方法可以有效地保留唯一记录并删除多余的重复项。

需求:数据库中存在名称重复的数据,删除重复的只保留一条。

方法1:使用distinct

DELETE FROM company_info WHERE id not in (select  a.id from (SELECT *, count(DISTINCT company_name) FROM `company_info` GROUP BY company_name) a );

方法2: 使用row_number over

DELETE FROM company_info WHERE id in (
      SELECT id from (
        SELECT *, row_number() over (partition by company_name) as rn from company_info) a  
      where a.rn > 1)

 

### MySQL删除表内字段重复数据的方法 #### 使用子查询和 `DELETE` 语句 (适用于少量重复) 对于仅存在一次重复的情况,可以通过自连接的方式找到并删除多余的记录。具体操作如下: ```sql DELETE t1 FROM table_name AS t1 INNER JOIN table_name AS t2 ON t1.duplicate_column = t2.duplicate_column AND t1.id > t2.id; ``` 这条 SQL 语句会保留具有最小 ID 的那一行,并移除其他所有拥有相同 `duplicate_column` 的行[^1]。 #### 处理大量不确定次数的重复项 当面对未知数量的重复条目时,可以采用临时表的方式来处理这个问题。创建一个新的临时表存储唯一键组合后的结果集,再将其内容重新导入原表中替换旧有的数据结构: ```sql CREATE TEMPORARY TABLE temp_table SELECT MIN(id) as id, duplicate_column FROM table_name GROUP BY duplicate_column; TRUNCATE TABLE table_name ; INSERT INTO table_name (id,duplicate_column) SELECT * FROM temp_table ; DROP TEMPORARY TABLE IF EXISTS temp_table; ``` 这种方法能够有效地清理掉所有的冗余副本,只留下每组重复中最先出现的那一份记录. #### 应用窗口函数(MySQL 8.0 及更高版本) 如果使用的 MySQL 版本支持窗口函数,则可利用此特性简化去除重复的过程。通过分配唯一的编号给每一组内的成员来识别哪些应该被清除: ```sql WITH CTE AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY duplicate_column ORDER BY id ASC) row_num FROM table_name ) DELETE FROM table_name WHERE id IN( SELECT id FROM CTE WHERE row_num > 1 ); ``` 上述命令会在保持原始顺序的前提下消除除了第一次遇见之外的所有匹配实例. 为了确保安全性和准确性,在执行任何更改之前建议备份整个数据库或至少涉及修改的目标表格。此外,测试环境下的验证也是必不可少的一个环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值