
[英]SQL Server - How do I query a table for matches with keywords from another table?
[英]How do I select rows in 1 table containing keywords from another table in SQL?
我有两个表-一个带有句子,另一个带有关键字。 我想从包含任何关键字的句子表中选择行。
例如:
句子
我喜欢我的狗
我最喜欢的食物是面食
编程很有趣
关键词
最喜欢的食物
狗
我的目标是返回前两行。
到目前为止,我有:
select a.*
from sentences a
join keywords b
on a.sentences like '%' || b.keywords || '%'
但是我收到错误消息“执行此查询涉及执行一个或多个无法优化的笛卡尔积连接”
有任何想法吗? 提前致谢。 也不确定是否很重要,但是我在SAS 9.4上执行此操作
此类代码中有几个要防止的问题,但主要要注意的是:搜索关键字中的前导空格和尾部空格,字符大小写匹配(大多数SAS字符比较均区分大小写),重复的匹配项(多个关键字匹配一个句子)。
下面的代码模式应处理这些问题。
select distinct a.*
from sentences a cross join keywords b
where findw(a.sentences,b.keywords,' ','ir');
“ distinct”参数将删除重复的匹配项,而findw函数指定使用空格''作为唯一需要关注的分隔符,'ir'指定不区分大小写(修饰符'i')并删除开头和结尾的分隔符/空格(修饰符'r'与指定的''作为分隔符)。
根据所涉及的数据大小,通过使用数据步骤和哈希表可能会看到更好的性能。 这样一来,您就可以停止测试第一个关键字匹配的句子。 sql代码针对每个关键字测试每个句子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.