如何在SQL中查找不完全相同但相似的重复字符串值

时间:2011-04-01 10:23:20

标签: mysql sql ruby duplicate-data duplicate-removal

我有一个列名为company_name(string)的表,我需要找到此列的重复值,我不能使用distinct或group by,因为它们不完全相同。 例如:

atec,inc
atec inc
ate inc  

abc group
abc groups
abc grups

我如何在sql中找到这样的条目,或者是否有任何ruby库。

3 个答案:

答案 0 :(得分:1)

如果对变体有某种模式,你可以尝试使用正则表达式,MySQL似乎支持(我们使用Postgres,肯定会这样做):

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

如果情况并非如此,我担心您必须在自己的应用中执行此操作。正如Pete所提到的,有各种各样的算法可以找到相似的声音,我们使用/已经使用了Levenshtein距离,Hamming的simhashes距离和KölnerPhonetic编码。

答案 1 :(得分:0)

我不知道SQL有一个SELECT WHERE A SORTA_OF_LIKE B但查找“Levenshtein距离”,也许是一种做出你想要的方式。

答案 2 :(得分:0)

这对于功能索引来说是一个完美的用法,但由于我认为MySQL不具备其中之一,我可以建议在MySQL中进行全文搜索吗?

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

特别是布尔搜索:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

此外,如果您不熟悉单词的词干,那么这个强大的概念也可以帮助您增加对搜索的检索。

希望有所帮助。