SQL - 比较两个表中的字符串(模糊匹配......有点)

blu*_*blu 5 sql string fuzzy-search reference match

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

公司参考表

company_id  company_name  company_state
1           Awesome Inc   NY
2           Excel-guru    AL
3           Clean All     MI 
Run Code Online (Sandbox Code Playgroud)

公司表

company_name              company_state
abc123 Awesome   Inc      NULL
Excel gur xyz-987         NULL
Clean All Cleanall        NULL
Run Code Online (Sandbox Code Playgroud)

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

公司表

company_name              company_state
abc123 Awesome   Inc      NY
Excel gur xyz-987         AL
Clean All Cleanall        MI
Run Code Online (Sandbox Code Playgroud)

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

小智 3

尝试下面的查询来更新公司表:

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

另一种方法就是使用SELECT

SELECT c.*, cr.* FROM company c INNER JOIN company_ref cr
ON c.company_name LIKE concat('%', cr.company_name, '%');
Run Code Online (Sandbox Code Playgroud)

SQL小提琴:http://sqlfiddle.com/#!2/ec76f /1