【发布时间】:2011-10-26 04:21:04
【问题描述】:
以前的 DBA 管理一个包含 240 万个条目的非关系表,所有条目都具有唯一的 ID。但是,每条记录中都有不同数据的重复记录,例如:
+---------+---------+--------------+----------------------+-------------+
| id | Name | Address | Phone | Email | LastVisited |
+---------+---------+--------------+---------+------------+-------------+
| 1 | bob | 12 Some Road | 02456 | | |
| 2 | bobby | | 02456 | bob@domain | |
| 3 | bob | 12 Some Rd | 02456 | | 2010-07-13 |
| 4 | sir bob | | 02456 | | |
| 5 | bob | 12SomeRoad | 02456 | | |
| 6 | mr bob | | 02456 | | |
| 7 | robert | | 02456 | | |
+---------+---------+--------------+---------+------------+-------------+
这不是确切的表格 - 真正的表格有 32 列 - 这只是为了说明
我知道如何识别重复项,在这种情况下,我使用的是电话号码。我已将重复项提取到一个单独的表中 - 总共有 730k 个整体。
合并这些记录(并将不需要的记录标记为删除)最有效的方法是什么?
我已经研究过将 UPDATE 与 INNER JOIN 结合使用,但需要几个 WHERE 子句,因为我想用后续记录中的数据更新第一条记录,其中后续记录具有前记录没有的附加数据。
我查看过第三方软件,例如 Fuzzy Dups,但如果可能的话,我想要一个纯 MySQL 选项
那么最终目标是我会得到类似的东西:
+---------+---------+--------------+----------------------+-------------+
| id | Name | Address | Phone | Email | LastVisited |
+---------+---------+--------------+---------+------------+-------------+
| 1 | bob | 12 Some Road | 02456 | bob@domain | 2010-07-13 |
+---------+---------+--------------+---------+------------+-------------+
我应该查看存储过程/函数中的循环还是我错过了一些真正简单的事情?
【问题讨论】:
-
你将不得不编写一个程序......但我想知道更多你想要什么,你想根据电话分组,但是如果在那个组中你有不同的姓名或地址等,那么你会喜欢哪个值????
-
我想必须有一些稳定的工作点,所以如果我们只是说第一条记录应该是正确的记录。并非所有记录都如此,但我愿意冒险!