Ms access MS Access查询过滤器在“=”上正常,但在我使用“”时不正常?

Ms access MS Access查询过滤器在“=”上正常,但在我使用“”时不正常?,ms-access,ms-access-2007,ms-access-2003,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, tblRevRelLo

我正在使用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'));

可能该列有空值?因此,我认为Access使用SQL。有真的,有假的,也有未知的。并且假定空值未知。所以

WHERE col = 'value'
返回col不为null且值为“value”的所有行

WHERE col <> 'value'
返回col为null的所有行

要返回不满足col='value'的行,必须使用

WHERE col is null OR col <> 'value'
为什么不试试:

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

不是一个容易接近的人,但我相信这会满足你的要求。

你确定吗?左连接可能会在结果集中的tblEventLog列上引入NULL。如果没有值..当我在最后输入答案时,使用=condition时它如何比较,使用是NULL。我在查询中没有看到任何差异,但我仍然尝试并给出了相同的结果..如果我不从查询中删除..它正在过滤记录,因此,你的和我的没有区别如果Jet/ACE对它进行完全相同的优化,我也不会感到惊讶,因为它在逻辑上是等价的。您可以通过打开SHOWPLAN在Jet SHOWPLAN上的google来了解如何打开SHOWPLAN。作为Jet/ACE的一般建议,这也是危险的,因为在子查询中,由于某种原因,它无法在两个方面使用索引(它在say in中使用,并且存在),这只是导致问题的NOT。Access不喜欢!=是吗?还有,你可以做,而不是在哪里。td.PartNumber=te.PartNumber上的左外连接tblEventLog te和。。。我把。。。因为这将是非或或您/我们开始工作的那一个。从tblRevRelLog_Detail LEFT加入tblRevRelLog_Detail.PartNumber=tblEventLog.PartNumber和tblEventLog.EventTypeSelected'Pn REMOVED FROM Wrapper';这就是你说的,对吗?不…这不是正确的语法。。。
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'));