如何在 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 代码针对每个关键字测试每个句子。
我有两个 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 代码针对每个关键字测试每个句子。