我的数据库表 A 中有一个 varchar 字段,我们称它为 store_name,该字段从实体 A 获取其值,现在实体 B 将 store_name 输入到不同的数据库表 B 现在我想获取表 A 中的所有记录store_name 匹配表 B 中的值。
由于我无法控制这 2 个字段的值,您建议我如何进行查询?
您如何看待 PostgreSQL fuzzystrmatch? 这些表包含数千条记录。
谢谢
最佳答案
假设A表和B表都在同一个数据库中。我想由于您不控制数据的插入,所以您不确定值是否大小写相同或者可能存在拼写不匹配。
情况一:如果只是大小写不匹配的问题,可以使用ilike:
Select a.store_name
from a, b
Where a.store_name ilike b.store_name
案例 2:如果您还想检查拼写不匹配,但单词听起来相似,那么在安装 postgresql-contrib 包并创建扩展 fuzzystrmatch 之后,您可以使用:
Select a.store_name
from a, b
Where a.store_name ilike b.store_name OR
soundex(a.store_name) = soundex(b.store_name)
如果您正在处理可能并不总是英文的名称,使用变音位或 dmetaphone 函数而不是 soundex 可能更合适。
关于sql - PostgreSQL 将字符串匹配到动态输入的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370287/