如何在 1 table 中的 select 行包含来自 SQL 中另一个 table 的关键字?

How do I select rows in 1 table containing keywords from another table in SQL?

我有两个 tables - 一个有句子,另一个有关键词。我想 select 句子 table 中包含任何关键字的行。

例如:

句子

关键词

我的目标是前两行 return。

到目前为止我有:

select a.*

from sentences a

join keywords b

on a.sentences like '%' || b.keywords || '%'

但是我收到错误 "the execution of this query involves performing one or more Cartesian product joins that can not be optimized"

有什么想法吗?提前致谢。也不确定它是否重要但我在 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')并删除前导和尾随 delimiters/spaces(修饰符 'r' 结合指定 ' ' 作为分隔符)。

根据所涉及的数据大小,您可能会通过使用数据步骤和散列来获得更好的性能 table。这将允许您在第一个关键字匹配时停止测试句子。 sql 代码针对每个关键字测试每个句子。