SQL:喜欢和不喜欢的问题

时间:2010-07-07 20:56:03

标签: sql ms-access vba ms-access-2007

我在访问中有这样的陈述:

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,我看到它返回的内容实际上是DID包含IT_OXYC,和其他一些参数。

我的陈述有问题吗?

我正在尝试获取所有没有IT_OXYC, OXY_SNOXY_S, etc的记录......并且DO有OXYC_SNEG,或{{ 1}}

7 个答案:

答案 0 :(得分:3)

它可能只是优先级...用大括号来定义它来设置优先级:WHERE(面板不喜欢'1'和面板不喜欢'2')和(面板LIKE'3'或面板喜欢'4')< / p>

答案 1 :(得分:2)

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

  

我正在尝试获取所有记录

SELECT * FROM accountsnew

  

没有(...)

  

有IT_OXYC或OXY_SN或OXY_S等......

(x LIKE' IT_OXYC '或x LIKE' IOXY_SN '或x x LIKE' OXY_S '或......)

  

和DO有OXYC_SNEG或OXYC_PNEG,

AND(x LIKE' OXYC_SNEG '或x 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*')

答案 2 :(得分:1)

不确定它是否有所作为,但我会把括号放在最后,所以:

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,*');

您只有一个OR在一行中只包含AND个。它可能会看到其中一个OR为真,并认为整条线都是真的

答案 3 :(得分:1)

请原谅我亲爱的姨妈莎莉:你可能需要一些括号才能让你做你想做的事。我怀疑你需要把它们放在最后:

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,*');

答案 4 :(得分:1)

我记得使用Access更好地说

SELECT *
FROM accountsnew
WHERE NOT [Panels] like '*IT_OXYC,*' 
    and not [Panels] like '*OXY_SN,*' 
    and not [Panels] like '*OXY_S,*' 

答案 5 :(得分:1)

你的一些包含oxyc_sneg和oxcy_pneg的记录,也包含it_oxcy和其他...

因此,当您尝试获取记录时,[Panels]如' OXYC_SNEG,'或[Panels]如' OXYC_PNEG,,它还会为您提供一些记录其中包含OXYC_SNEG和it_oxcy或OXYC_PNEG和it_oxcy等......

所以你能在这做什么呢,

SELECT *
FROM accountsnew
WHERE { [Panels] like '*OXYC_SNEG,*' and 
{[Panels] not like '*IT_OXYC,*' and [Panels] not like '*OXY_SN,*' and [Panels] not like '*OXY_S,*' and [Panels] not like '*OXY_N,*}
}
or 
{[Panels] like '*OXYC_PNEG,*' and  
{[Panels] not like '*IT_OXYC,*' and [Panels] not like '*OXY_SN,*' and [Panels] not like '*OXY_S,*' and [Panels] not like '*OXY_N,*} }

这应该可以正常工作,但在尝试之前只需用正确的语法编写。

答案 6 :(得分:1)

不要使用OR使用AND这将正常工作