首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL: like和NOT LIKE的问题

SQL: like和NOT LIKE的问题
EN

Stack Overflow用户
提问于 2010-07-08 04:56:03
回答 7查看 15K关注 0票数 1

我在access中有这样一条语句:

代码语言:javascript
复制
SELECT *
FROM accountsnew
WHERE [Panels] not like '*IT_OXYC,*' and [Panels] not like '*OXY_SN,*' and [Panels] not like '*OXY_S,*' and [Panels] not like '*OXY_N,*' and [Panels] like '*OXYC_SNEG,*' or [Panels] like '*OXYC_PNEG,*';

由于某些原因,它没有返回正确的数据集。当我使用excel更深入地查看返回的数据时,我发现它返回的内容实际上包含IT_OXYC,和其他一些参数。

我的陈述有什么问题吗?

我正在尝试获取所有没有IT_OXYC, OXY_SNOXY_S, etc的记录...并且确实有OXYC_SNEG,OXYC_PNEG,

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-08 04:59:14

你的逻辑错了。逐位翻译您的请求:

我正在尝试获取所有记录

SELECT * FROM accountsnew

不支持的

WHERE NOT (...)

有IT_OXYC、OXY_SN或OXY_S,等等。

(x LIKE 'IT_OXYC‘OR x LIKE 'IOXY_SN’或x LIKE 'OXY_S‘OR ...)

不是有OXYC_SNEG就是OXYC_PNEG

AND (x LIKE 'OXYC_SNEG‘或x LIKE 'OXYC_PNEG')

把所有这些放在一起:

代码语言:javascript
复制
SELECT *
FROM accountsnew
WHERE NOT ([Panels] LIKE '*IT_OXYC*' OR
           [Panels] LIKE '*IOXY_SN*' OR
           [Panels] LIKE '*OXY_S*' OR ...)
AND ([Panels] LIKE '*OXYC_SNEG*' OR 
     [Panels] LIKE '*OXYC_PNEG*')
票数 2
EN

Stack Overflow用户

发布于 2010-07-08 05:00:10

这可能只是优先权..。用大括号定义它以设置优先级: WHERE (面板不像'1‘,面板不像'2')和(面板像'3’或面板像'4')

票数 3
EN

Stack Overflow用户

发布于 2010-07-08 05:00:56

我不确定这是否有区别,但我会在结尾处放入括号,因此:

代码语言:javascript
复制
WHERE [Panels] not like '*IT_OXYC,*' and [Panels] not like '*OXY_SN,*' and [Panels] not like '*OXY_S,*' and [Panels] not like '*OXY_N,*' and ([Panels] like '*OXYC_SNEG,*' or [Panels] like '*OXYC_PNEG,*');

在只包含AND%s的行中有一个OR。它可能将其中一个OR视为true,并认为整行都是true

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

https://stackoverflow.com/questions/3198736

复制
相关文章

相似问题

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