如何在MySQL中匹配列

3

每个人都知道“=”符号。

SELECT * FROM mytable WHERE column1 = column2;

如果我在列1和列2中有不同的内容...但它们非常相似呢?(可能只差一个空格,或者有一个不同的单词)

是否有可能实现以下功能:

SELECT * FROM mytable WHERE ....column matches column2 with .4523423 "Score"...

我相信这被称为模糊匹配?或者是模式匹配?这是技术术语。

编辑:我知道Soundex和Levenstein距离。那是你推荐的吗?


我认为有一些东西可以使用MATCH命令,并基于相关性进行操作...不过我也不太确定。 - Petrogad
您要寻找的术语是编辑距离。通常实现为Levenshtein距离。 - Lukáš Lalinský
2个回答

5
你寻找的是称为Levenstein distance的东西。它给出了描述两个字符串之间差异的数值。
在MySQL中,你需要编写存储过程来实现这个功能。这里是一篇可能有帮助的文章。

我知道我需要使用Levenstein距离,但是如何进行扩展呢?我有4000万行数据,如何高效地处理或分发它,以避免服务器崩溃? - TIMEX
3
Levenshtein是谁? - Luiscencio

0
Lukasz Lysik发布了一个存储过程的引用,可以从数据库内部执行模糊匹配。如果您希望将其作为持续任务执行,则最好采用此方法。但是,如果您想将其作为一次性任务执行,并且可能需要进行复杂检查,或者想要执行复杂操作以清理模糊匹配,您可能希望从Python中执行模糊匹配。(您的标签之一是“python”,因此我假设您接受Python解决方案...)使用Python ORM,您可以获得一个Python列表,每个数据库行对应一个对象,然后使用Python的全部功能来分析数据。您可以使用正则表达式、Python Levenstein函数或其他任何内容。Python的全能ORM可能是SQLAlchemy。实际上,我更喜欢Django的ORM;它更简单,我很注重简洁。如果您的ORM需求不复杂,则Django ORM可能是一个不错的选择。如果有疑问,就去使用SQLAlchemy吧。祝您好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接