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

MySQL 8表中含多余空格的重复姓名记录删除方案咨询

解决MySQL中带空格前缀姓名重复记录的删除方法

核心思路

只针对以MC 、MR 这类前缀开头的错误记录,匹配对应的无空格正确记录后删除错误项,避免误删其他正常带空格的姓名(比如名字和中间名之间的空格)。

步骤1:先识别要删除的错误记录

假设你的表名为person,姓名字段为full_name,主键为id。先执行以下查询,确认哪些是需要删除的重复记录:

SELECT 
    p1.id AS 待删除记录ID,
    p1.full_name AS 错误姓名,
    p2.id AS 保留记录ID,
    p2.full_name AS 正确姓名
FROM 
    person p1
JOIN 
    person p2 ON REPLACE(p1.full_name, 'MC ', 'MCC') = p2.full_name
WHERE 
    p1.full_name LIKE 'MC %'
UNION ALL
SELECT 
    p1.id AS 待删除记录ID,
    p1.full_name AS 错误姓名,
    p2.id AS 保留记录ID,
    p2.full_name AS 正确姓名
FROM 
    person p1
JOIN 
    person p2 ON REPLACE(p1.full_name, 'MR ', 'MRR') = p2.full_name
WHERE 
    p1.full_name LIKE 'MR %';

这段SQL会把所有MC 开头的错误记录和对应的MCC开头的正确记录配对,同理处理MR 开头的情况。

步骤2:删除错误记录

确认查询结果无误后,执行删除操作。建议用事务包裹,避免误删后无法恢复:

-- 开启事务
START TRANSACTION;

-- 删除错误记录
DELETE p1
FROM person p1
JOIN person p2 ON 
    (p1.full_name LIKE 'MC %' AND REPLACE(p1.full_name, 'MC ', 'MCC') = p2.full_name)
    OR (p1.full_name LIKE 'MR %' AND REPLACE(p1.full_name, 'MR ', 'MRR') = p2.full_name)
WHERE p1.id <> p2.id; -- 确保只删除错误的那条,保留正确记录

-- 检查删除结果(比如再执行步骤1的查询,确认无匹配记录)
-- 确认无误后提交事务
COMMIT;

注意事项

  • 先备份数据:执行删除前务必备份整张表,或者导出待删除记录,防止误操作。
  • 扩展前缀范围:如果还有其他类似前缀(如MAC ),可以在SQL中添加对应的OR条件,比如(p1.full_name LIKE 'MAC %' AND REPLACE(p1.full_name, 'MAC ', 'MAC') = p2.full_name)(根据实际正确格式调整)。
  • 处理无对应正确记录的情况:如果某些带空格的记录没有对应的无空格版本,你可能需要先修正这些记录(比如替换前缀后的空格),而不是直接删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:21