如何在MySQL中匹配列
大家都知道“=”这个符号。
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 就可以了。
祝你好运!