PostgreSQL 将字符串匹配到动态输入的字符串

PostgreSQL match string to dynamically entered string

我的数据库中有一个 varchar 字段 table A 让我们称它为 store_name,这个字段从实体 A 获取它的值,现在实体 B 输入 store_name 到不同的数据库table B 现在我想获取 table A 中的所有记录,其中 store_name 与 table B.

中的值匹配

由于我无法控制这 2 个字段的值,您建议我如何进行查询?

您如何看待 PostgreSQL fuzzystrmatch? table 包含数千条记录。

谢谢

如果要匹配,可以使用直接连接。

Select a.store_name
from a 
     join b on a.store_name = b.store_name; 

如果您想使用模糊匹配,只需使用连接条件中可用的各种函数即可。 Documentation here

注意:模糊字符串匹配有一些限制,因此我建议您对每个匹配或不匹配的值进行测试。

假设 table A 和 table 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)

如果您要处理可能并不总是英文的名称,则使用 metaphone 或 dmetaphone 函数而不是 soundex 可能更合适。

文档:Fuzzystrmatch