我有一个列名为 company_name(string) 的表,我需要找到该列的重复值,我不能使用 distinct 或 group by,因为它们不完全相同。例如:
atec,inc
atec inc
ate inc
abc group
abc groups
abc grups
我如何在 sql 中找到这样的条目,或者是否有任何 ruby 库。
我有一个列名为 company_name(string) 的表,我需要找到该列的重复值,我不能使用 distinct 或 group by,因为它们不完全相同。例如:
atec,inc
atec inc
ate inc
abc group
abc groups
abc grups
我如何在 sql 中找到这样的条目,或者是否有任何 ruby 库。
如果您可以尝试使用 MySQL 似乎支持的正则表达式的变体有某种模式(我们使用 Postgres,这肯定支持):
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
如果不是这种情况,恐怕您必须在您的应用程序中执行此操作。正如 Pete 提到的,有多种算法可以找到相似的声音,为此我们使用/已经使用了 Levenshtein 距离、Simhashes 的 Hamming 距离和 Kölner 语音编码。
我不知道 SQL 有一个 SELECT WHERE A SORTA_OF_LIKE B 但查找“Levenshtein distance”,也许是你想要的一种方式。
这将是功能索引的完美用途,但由于我认为 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
此外,如果您不熟悉词干,这是一个强大的概念,也可以帮助您增加搜索的检索率。
希望有帮助。