在另一个表中搜索整个单词的表,如果找到则从结果中排除

Posted

技术标签:

【中文标题】在另一个表中搜索整个单词的表,如果找到则从结果中排除【英文标题】:Search Table For Whole Word In Another Table, If Found Exclude From Result 【发布时间】:2015-09-22 17:24:09 【问题描述】:

使用 MS Access,我将如何使用 SQL 创建一个查询来搜索包含搜索词(1 到 10 个词短语)的表中的关键字或另一个表中的关键字词组,然后排除任何匹配项以生成搜索词列表不匹配?

搜索词表示例数据

树屋设计 纳尔逊树屋主人 连接点 安装挡板 不锈钢钉

否定关键词和关键词短语样本数据

签收 附上 使用 钢

所需的查询输出

树屋设计 纳尔逊树屋主人 连接点

注意:否定关键字包括“sign”和“attach”,但这不应阻止“tree house design”和“attachment point”出现在结果集中。我正在使用 Access 2007。

【问题讨论】:

我不确定你在问什么。 search terms 是表格还是您要搜索的内容? negative keywords 与搜索词和输出有何关联? 【参考方案1】:

这是查询

SELECT SearchTerms.Phrase
FROM SearchTerms, Negatives
GROUP BY SearchTerms.Phrase
HAVING (((Max(InStr(" " & [phrase] & " "," " & [exclude] & " ")))=0));

其中 SearchTerms 是搜索词表,Phrase 是搜索词字段,Negatives 是包含要排除的否定词的表,Exclude 是该表中的字段名称。

诀窍是我在短语前后添加了空格,然后查找与要排除的单词和前导/尾随空格的匹配项。这样我就可以只识别匹配整个单词而不是部分单词的短语。

当我设置表格并对其进行测试时工作正常。

【讨论】:

您确定需要前导空格吗? “附加”与“附加活页夹”不匹配 是的 - 您需要两个术语的前导空格,以便“附加”匹配“附加活页夹”。他们需要在搜索词的开头或结尾找到匹配项。 好的,不知道如何在phraseexclude 帮助中添加前导和尾随空格应该是相同的结果,exclude 之后只有尾随空格 两者都需要前导空格以避免在搜索词的单词末尾找到否定词的匹配 - 即“设计”和“标志”不匹配跨度> 太棒了唐乔治!您甚至通过将短语添加到查询中来解决短语前后没有空格的问题。不错的工作!我接受了你的回答,因为它 100% 有效,但我的问题确实有另一个问题。 [现在制定要求]

以上是关于在另一个表中搜索整个单词的表,如果找到则从结果中排除的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在 LIKE 查询 Laravel 中找到整个单词?

如果值存在于多个表中,则从表中获取结果

立即执行不返回预期结果以在整个表中搜索字符串

如果表中没有相关数据,则从其他表中提取数据

从 DataGrip 中的“数据库、表、过程”搜索中排除数据库

如果仅句子包含搜索列表中的任何关键字,则从数据框文本列中选择句子