从不同表的另一列中的一列中查找所有值
Posted
技术标签:
【中文标题】从不同表的另一列中的一列中查找所有值【英文标题】:Finding all values from one column within another column in a different table 【发布时间】:2021-12-17 23:17:42 【问题描述】:我正在尝试遍历表 Keyword_Table
中的列关键字中的所有值,并在列中搜索这些值
Block_of_Text
在另一个表 Raw_Text
中。来自Keyword_Table
的关键字嵌入在Raw_Text.Block_of_Text
的大量文本中。另一个重要的注意事项是 Keyword_Table
大约有 4000 条记录,而表 Raw_Text
大约有 4,000,000 条记录。最后,我希望输出包含一列,其值来自Keyword_Table.Keyword
,完整的Raw_Text.Block_of_Text
值包含来自Keyword_Table.Keyword
的相应值。
两个表之间没有共同的值,所以我不能使用我认为没有的连接。
目前我正在尝试使用此代码,但考虑到表格的规模,它的效率极低。我在Raw_Tex
t 中添加了一个名为Corresponding_Keyword
的列
UPDATE [Raw_Text]
SET Corresponding_Keyword =
(
CASE
WHEN Block_of_Text LIKE CONCAT('%','XXXX','%') Then 'XXXX'
WHEN Block_of_Text LIKE CONCAT('%','YYYY','%') Then 'YYYY'
WHEN Block_of_Text LIKE CONCAT('%','ZZZZ','%') Then 'ZZZZ'
END
)
但是在这种情况下不是3个案例,而是4000个。所以显然这个解决方案是不合理的。有没有人对我如何最好地处理这种情况有任何见解。缺少要加入的字段对我来说似乎是个问题,但考虑到大表任务的性质,这是否本质上很困难?谢谢。
【问题讨论】:
Corresponding_Keyword
如果有多个关键字,你想要什么值,例如Block_of_Text
包含所有值 XXXX
、YYYY
和 ZZZZ
?
在 T-SQL 中没有有效的解决方案,除非你转向全文搜索之类的东西。问题是必须以一种或另一种方式 4000 LIKE
s 发生,而且这并不快,无论您如何编写查询。查询本身可能类似于WITH T AS (SELECT *, (SELECT TOP(1) Keyword FROM Keyword_Table WHERE Block_of_Text LIKE '%' + Keyword + '%' ORDER BY Keyword) AS Lookup_Keyword FROM Raw_Text) UPDATE T SET Corresponding_Keyword = Lookup_Keyword
(以及其他方法),但如前所述,速度不快。
如果有多个匹配的关键字,那么我会很高兴最后一个关键字匹配为 Corresponding_Keyword 中的那个。至于这不会很快,这是我所期望的。我感谢您的意见
“Block_of_Text”的数据类型和最大长度是什么?
【参考方案1】:
这样的 JOIN 应该可以工作,但我不确定性能:
SELECT kw.Keyword, t.Block_of_Text
FROM Keyword_Table kw
JOIN Raw_Text t ON t.Block_of_Text LIKE '%' + kw.Keyword + '%'
【讨论】:
以上是关于从不同表的另一列中的一列中查找所有值的主要内容,如果未能解决你的问题,请参考以下文章