我在access中有这样一条语句:
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_SN,OXY_S, etc的记录...并且确实有OXYC_SNEG,或OXYC_PNEG,
发布于 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')
把所有这些放在一起:
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*')发布于 2010-07-08 05:00:10
这可能只是优先权..。用大括号定义它以设置优先级: WHERE (面板不像'1‘,面板不像'2')和(面板像'3’或面板像'4')
发布于 2010-07-08 05:00:56
我不确定这是否有区别,但我会在结尾处放入括号,因此:
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
https://stackoverflow.com/questions/3198736
复制相似问题