SQL - 比较来自两个表的字符串(模糊匹配......排序)

标签 sql string reference match fuzzy-search

我已经搜索了这些问题,并且提出了类似的问题,但没有我认为可以使用的解决方案。这个问题类似于模糊匹配......有点。我需要帮助比较两个表。一个表是公司引用表,另一个是获取每天导入的原始公司数据的表。引用表很干净,并且有一个与每个公司相关联的公司 ID。导入的每日数据没有公司 ID。我想要做的是让每日数据引用 company_name 上的“公司引用表”,并根据 company_name 更新“公司表”的列 company_state。不幸的是,company_name 的每日数据字符串每天并不总是相同。实际公司名称前面或后面可能有各种字符(a-z、0-9、+、-、.)和空格,每天都有不同的长度,所以我不相信我可以使用 charindex 来清理它。

公司引用表

company_id  company_name  company_state
1           Awesome Inc   NY
2           Excel-guru    AL
3           Clean All     MI 

公司表
company_name              company_state
abc123 Awesome   Inc      NULL
Excel gur xyz-987         NULL
Clean All Cleanall        NULL

我想要它做的是这个。有点像模糊匹配。

公司表
company_name              company_state
abc123 Awesome   Inc      NY
Excel gur xyz-987         AL
Clean All Cleanall        MI

任何帮助深表感谢。谢谢你。

最佳答案

尝试以下查询更新 公司 table :

update company c INNER JOIN company_ref cr
ON c.company_name LIKE concat('%', cr.company_name, '%') 
SET c.company_state = cr.company_state;

另一种方法是使用 选择
SELECT c.*, cr.* FROM company c INNER JOIN company_ref cr
ON c.company_name LIKE concat('%', cr.company_name, '%');

SQL fiddle :http://sqlfiddle.com/#!2/ec76f/1

关于SQL - 比较来自两个表的字符串(模糊匹配......排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215608/

相关文章:

Oracle:在 PLSQL 中获取引用

sql - 使用 PostgreSQL 删除基于选择查询中字段的重复行?

sql - 三重加入sqlite

r - 将串联列拆分到相应的列位置

c - 如何在 C 中创建字符串数组?

c++ - 创建引用的类模板包装器会导致未定义的行为吗?

Mysql 连接到同一个表,其中列仅出现在今天

sql - 未处理的异常错误 - 用户登录失败

java - 字符串转十六进制短java

c++ - 工作范围究竟如何?