如何在MySQL中匹配列

3 投票
2 回答
682 浏览
提问于 2025-04-15 15:06

大家都知道“=”这个符号。

SELECT * FROM mytable WHERE column1 = column2;

但是,如果我在第一列和第二列里的内容不完全一样,但它们非常相似呢?(可能只是多了一个空格,或者有一个词不一样)。

有没有可能做到:

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

我觉得这叫模糊匹配?或者说是模式匹配?这是它的专业术语。

补充:我知道Soundex和Levenstein距离。这是你推荐的方式吗?

2 个回答

0

Lukasz Lysik 提到了一种存储过程,可以在数据库内部进行模糊匹配。如果你想把这当作一个长期的任务,这个方法是最好的选择。

但是,如果你只是想做一次性的任务,或者需要进行复杂的检查,或者想要处理模糊匹配的结果,那么你可能会想在 Python 中进行模糊匹配。(你提到的标签中有“python”,所以我猜你对 Python 的解决方案是开放的……)

使用 Python 的 ORM(对象关系映射),你可以得到一个 Python 列表,每一行数据库数据对应一个对象,然后就可以利用 Python 强大的功能来分析你的数据。你可以使用正则表达式、Python 的 Levenstein 函数,或者其他任何工具。

对于 Python 来说,最好的 ORM 可能是 SQLAlchemy。我个人更喜欢 Django 的 ORM,因为它更简单,我比较看重简单性。如果你的 ORM 需求不复杂,Django 的 ORM 可能是个不错的选择。如果不确定的话,直接选择 SQLAlchemy 就可以了。

祝你好运!

5

你要找的东西叫做 莱文斯坦距离。它可以给你一个数字,这个数字表示两个字符串之间的差异有多大。

在MySQL中,你需要写一个存储过程来实现这个功能。这里有一篇文章可能会对你有帮助。

撰写回答