You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除MySQL数据表中近似重复的企业名称记录

MySQL删除近似重复企业名称记录方案

操作前务必先备份全表数据,避免误删无法恢复,备份命令参考:

mysqldump -u 你的数据库用户名 -p 你的数据库名 你的表名 > table_backup.sql

核心思路

你遇到的近似重复是标点、空格差异导致的,先对name字段做标准化处理,消除格式差异后分组,保留ID较小的记录,删除其余重复记录。


步骤1:先查询确认重复记录,避免误删

执行以下查询语句,提前核对重复数据是否符合预期:

SELECT 
  MIN(id) AS 需保留的记录ID,
  LOWER(TRIM(REGEXP_REPLACE(name, '[,. ]+', ' '))) AS 标准化后企业名,
  GROUP_CONCAT(id SEPARATOR ',') AS 所有重复记录ID,
  COUNT(*) AS 重复条数
FROM 你的表名
GROUP BY 标准化后企业名
HAVING 重复条数 > 1;

语句说明:REGEXP_REPLACE会将名称里的逗号、点、连续空格统一替换为单个空格,再转小写、去除首尾空格,确保相似名称处理后完全一致。
如果你使用的MySQL版本低于8.0,没有REGEXP_REPLACE函数,可以替换为嵌套REPLACE实现:
把REGEXP_REPLACE(name, '[,. ]+', ' ')替换为REPLACE(REPLACE(REPLACE(name, ',', ''), '.', ''), ' ', ' ')即可。

步骤2:执行删除操作

核对查询结果无误后,执行以下删除语句,会自动保留ID最小的记录,删除其余重复的近似记录:

DELETE t1
FROM 你的表名 t1
INNER JOIN 你的表名 t2
  ON LOWER(TRIM(REGEXP_REPLACE(t1.name, '[,. ]+', ' '))) = LOWER(TRIM(REGEXP_REPLACE(t2.name, '[,. ]+', ' ')))
  AND t1.id > t2.id;

后续优化建议

因为你的name字段设置了UNI唯一索引,后续可以新增一个normalized_name字段存储标准化后的企业名称,给该字段加唯一索引,写入新数据时先做标准化处理,从根源避免近似重复数据入库。

内容的提问来源于stack exchange,提问作者technophile_3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:04