MS-Access查询在“=”上过滤确定,但在使用“<>”时没有?

时间:2010-08-19 16:58:47

标签: ms-access ms-access-2007 ms-access-2003

我使用的是Microsoft Access 2000,

当我使用“=”条件时,此查询会进行过滤,但当我使用“<>”时,它不会过滤。 可能是什么问题?

SELECT tblRevRelLog_Detail.RevRelTrackingNumber, tblRevRelLog_Detail.PartNumber, tblRevRelLog_Detail.ChangeLevel, tblRevRelLog_Detail.Version, tblRevRelLog_Detail.JobPnType, tblRevRelLog_Detail.EdsName, tblRevRelLog_Detail.FmeaText1, tblRevRelLog_Detail.FmeaText2, tblRevRelLog_Detail.LasdtEvent, tblRevRelLog_Detail.DetailerNamePerPartNumber, tblRevRelLog_Detail.DetailerCompanyPerPartNumber
FROM tblRevRelLog_Detail LEFT JOIN tblEventLog ON tblRevRelLog_Detail.PartNumber = tblEventLog.PartNumber
WHERE (((tblEventLog.EventTypeSelected)<> 'Pn REMOVED from Wrapper'));

2 个答案:

答案 0 :(得分:0)

也许列有空值? SQL(因此,我认为Access)使用three valued logic。有真实,虚假和未知。和NUll值假设未知。所以

WHERE col = 'value'

返回col不为null且值为'value'的所有行

WHERE col <> 'value'

返回col 不为空且 col的值不是'value'的所有行

WHERE col is null

返回col为null的所有行。

要返回不符合col = 'value'的行,您必须使用

WHERE col is null OR col <> 'value'

答案 1 :(得分:0)

为什么不尝试:

SELECT td.RevRelTrackingNumber,
       td.PartNumber,
       td.ChangeLevel,
       td.Version,
       td.JobPnType,
       td.EdsName,
       td.FmeaText1,
       td.FmeaText2,
       td.LasdtEvent,
       td.DetailerNamePerPartNumber,
       td.DetailerCompanyPerPartNumber
FROM   tblRevRelLog_Detail td
LEFT JOIN tblEventLog te ON td.PartNumber = te.PartNumber
WHERE NOT(((te.EventTypeSelected) = 'Pn REMOVED from Wrapper'));

没有多少Access用户,但我相信这会实现你想要的。