MySQL显示可能的重复

时间:2011-04-25 19:38:21

标签: mysql sql

我希望从name列的MySQL表中显示所有可能的重复条目。

例如,Adobe Photoshop和Photoshop应显示为“可能的重复项”。

这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以从使用SOUNDEX()开始,这可能会满足您的需求

SOUNDEX()的缺点是:

  • 无法区分较长的字符串。只考虑前几个字符,最后分叉的较长字符串生成相同的SOUNDEX值
  • 第一个字母必须相同或者您不会轻易找到匹配的事实。 SQL Server有DIFFERENCE()函数来告诉你两个SOUNDEX值有多远,但我认为MySQL里面没有这种类型。
  • 对于MySQL,至少根据the docs,SOUNDEX因unicode输入而被破坏

示例:

SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')

/* all of these return 'M262' */

对于更高级的需求,我认为您需要查看两个字符串的Levenshtein distance(也称为“编辑距离”)并使用阈值。这是更复杂(=更慢)的解决方案,但它允许更大的灵活性。

主要缺点是,您需要两个字符串来计算它们之间的距离。使用SOUNDEX,您可以在表格中存储预先计算的SOUNDEX,并对其进行比较/排序/分组/过滤。使用Levenshtein距离,您可能会发现“Microsoft”和“Nzcrosoft”之间的区别仅为2,但需要花费更多时间才能得出结果。

无论如何,可以在Levenshtein Distance as a MySQL Stored Function 找到MySQL的Levenshtein距离函数示例。