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

标签 sql postgresql fuzzy-search

我的数据库表 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 可能更合适。

文档:Fuzzystrmatch

关于sql - PostgreSQL 将字符串匹配到动态输入的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370287/

相关文章:

sql - Hibernate SQL 转换对于 Enum 字段类型失败

java - 使用 java.util.list 获取 Hibernate 映射异常

java - Solr 中的 DoubleMetaphoneFilterFactory

elasticsearch - 模糊匹配中具有编辑距离的模糊性参数中的Elasticsearch不一致

sql - 将特定表数据从一个数据库复制到 SQL Server 中的另一个数据库

php - 在 laravel 中编写 sql 查询时遇到困难

C# Property get set 不设置值

database-design - 审计表数据库设计 : Does creating Audit Tables for Join Tables make sense

php - 在 php7-fpm Docker 容器中安装 Postgres 驱动程序

Oracle 模糊搜索(带空格)