【问题标题】:SQL Server - Partial String match - two columns of different tablesSQL Server - 部分字符串匹配 - 不同表的两列
【发布时间】:2010-12-13 15:59:15
【问题描述】:

我需要 SQL Server 的查询(或存储过程),其中我需要比较具有以下结构的两个不同表的数据

表 1

ID       Text       Table2ID
1        Chris   
2        John
3        Paul

表2

ID       Text
1        Mitchell Johnson
2        Chris Martin
3        Steven

通过比较以上两个表,我需要从 table2 中获取 'ID' 并将它们插入到第一个表的 'Table2ID' 列中

比较标准:-

'Table1'的'Text'列中的完整单词应该包含在'Table2'的'Text'列中

在我们的例子中,我们将从 table2 中获取前两行的“ID”(因为单词 John 包含在 'Mitchell Johnson' 中,单词 Chris 包含在 'Chris Martin' 中,而 Paul 不包含在 'Table2 中')

我怎样才能做到这一点?如果这里有人能够照亮我的道路,那就太好了

问候, 拉古拉曼.V

【问题讨论】:

  • 你建议如何处理双重匹配,即如果你有“Chris Johnson”,你会如何处理它?
  • @RedFilter - 在类似的过程中,非常相似的东西在我的后方咬过 :)

标签: sql-server partial string-matching


【解决方案1】:

抽象的答案是:

UPDATE Table
SET Table.col1 = other_table.col1
FROM Table
INNER JOIN other_table ON Table.id = other_table.id

具体来说:

update Table1
set Table1.Table2ID = Table2.ID
from Table1
inner join Table2 on Table2.Text like '%' + Table1.Text + '%'

【讨论】:

  • abstract answer 是什么意思?
  • 抽象含义不特定于您的情况,一个概括的答案。这是您下次需要执行UPDATE FROM 类型的查询时可以使用的模式。
  • 出于好奇(如果 table2 也包含记录 4 | John Smith),您会猜到 table1.table2Id 等于 1 还是 4?
  • 我在 table1 中有一行带有 '#WALT DISNEY' 的行,同样在 table2 中有一行带有 '#DISNEY WORLD' 的行。您的查询不会将其视为匹配项。我希望你明白我的意思
  • @Raghu:你只是从根本上改变了你的问题范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多