如何从SQL中的另一个表中选择包含关键字的1个表中的行?

如何从SQL中的另一个表中选择包含关键字的1个表中的行?,sql,indexing,sas,keyword,contains,Sql,Indexing,Sas,Keyword,Contains,我有两个表格,一个有句子,另一个有关键词。我想从句子表中选择包含任何关键字的行 例如: 判决 我喜欢我的狗 我最喜欢的食物是意大利面 编程很有趣 关键词 喜爱的食物 狗 我的目标是返回前两行 到目前为止,我已经: select a.* from sentences a join keywords b on a.sentences like '%' || b.keywords || '%' 然而,我得到了一个错误“此查询的执行涉及执行一个或多个无法优化的笛卡尔乘积联接” 有什么想法

我有两个表格,一个有句子,另一个有关键词。我想从句子表中选择包含任何关键字的行

例如:

判决

  • 我喜欢我的狗

  • 我最喜欢的食物是意大利面

  • 编程很有趣

关键词

  • 喜爱的食物

我的目标是返回前两行

到目前为止,我已经:

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代码针对每个关键字测试每个句子。

错误告诉您如何获得解决方案是错误还是注释?因为您需要比较ev每个记录到表中的每个其他记录都是笛卡尔连接。可能是