繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM