从MySQL表中删除重复的行(忽略字符和空格)

时间:2014-05-22 11:41:30

标签: mysql sql

我有MySQL表'人':

id[byte], name [varchar], surname [varchar], size [int]

大约有1k行,其中大多数是重复的,例如

  • Xbyte1X,'mike','anders',5
  • Xbyte2X,'Mike','andERS',5

  • Xbyte1X,'','',0;
  • Xbyte2X,'','',0;

我想删除重复项,但我必须处理:   - 修剪   - 大/低的字符   - 空/空记录

我必须记住删除行的'oid',因为我必须在其他表中替换它(它的关系模型) 如何制作一个程序,可以修复我的表'人'并删除这样的重复?

PS它只是一个示例表,真正的表,它有更少的列和更多的数据

1 个答案:

答案 0 :(得分:1)

我们在以下方式解决了ETL过程中的类似问题:

战略:

  • 向人员表IsDuplicate添加至少两个新列 NewID(或者从人员表数据中创建一个新表,然后添加 新专栏)。
  • 运行该过程以检测重复记录,将记录IsDuplicate更新为true并将NewId列填入已记录的记录ID
  • 您最终会在人员表中记录记录,使用其重复行的NewId标记为IsDuplicate = true,现在您可以在其他表中找到这些记录相关数据,并使用newId值更新关系
  • 现在是从人员表中删除冗余数据的时候了 建议保留表的备份。

查找重复数据:
查找重复数据将与选择需要删除重复集的哪个记录一样困难,这取决于您的应用程序业务,样本可以选择最早的id
获取重复项的公式可以创建一个标准名称,如:CONCAT(Upper(Trim(Replace(people.name,' ',''))) ,Upper(Trim(Replace(people.surname' ',''))))

希望这有帮助。