首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多列上使用NOT

在多列上使用NOT
EN

Stack Overflow用户
提问于 2021-04-21 15:59:19
回答 1查看 269关注 0票数 1

得到一个搜索,我现在正在构建我自己版本的查询过滤,例如,布尔搜索。我的意思是我可以做office +sweden,这应该意味着sweden必须存在。我们不能使用布尔搜索的原因以外的问题。

假设我有一个名为documents的表,其中有两个列,contentnotes。当我在搜索栏中输入+office +sweden时,我会执行类似于此的操作:

代码语言:javascript
复制
SELECT * FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%') AND
      (content LIKE '%sweden%' or notes LIKE '%sweden%')

到目前为止,这是完全可行的。这只会给我一些文档,其中office sweden位于contentnotes的某个位置。

现在,我想做同样的事情,但是用减号。例如,如果我搜索office -sweden,我希望获得包含的所有文档, officecontentsnotes中都不包含 sweden (是的,还有通配符)。

我尝试过多种方法,但没有让它正常工作。例如,我尝试过使用NOT LIKE,但没有让它正常工作:

代码语言:javascript
复制
SELECT * FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%') AND
      (content NOT LIKE '%sweden%' or notes NOT LIKE '%sweden%')

感觉就像or把这个搞砸了。我也尝试过使用AND NOT

代码语言:javascript
复制
SELECT * FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%') AND NOT
      (content LIKE '%sweden%' or notes LIKE '%sweden%')

我对AND NOT寄予厚望,但这也不像预期的那样有效。

希望我想要做的事情是清楚的。获取所有包含office但不包含使用LIKEsweden的文档。

解决方案

结果发现这些查询本身没有什么问题。查询中有更多可能为null的字段。我在问题中省略了这些字段,以便更容易理解。如果您有可以包含null的字段,请确保像戈登下面所说的那样处理这个问题。

我使用null运算符处理IFNULL字段,如下所示:

代码语言:javascript
复制
SELECT * FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%' or nullfield LIKE '%office%') AND
      NOT (IFNULL(content, '') LIKE '%sweden%' or IFNULL(notes, '') LIKE '%sweden%' or IFNULL(nullfield, '') LIKE '%sweden%')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-21 16:00:18

只需使用not like

代码语言:javascript
复制
SELECT *
FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%') AND
      (content NOT LIKE '%sweden%' and notes NOT LIKE '%sweden%');

或者如果你喜欢:

代码语言:javascript
复制
SELECT *
FROM documents
WHERE (content LIKE '%office%' or notes LIKE '%office%') AND
      NOT (content LIKE '%sweden%' or notes LIKE '%sweden%');

请注意:NOT LIKELIKE一样忽略NULL值。因此,如果值可以是NULL,则需要考虑这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67199370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档