为什么 Access 查询会由于列中的空字符串而丢弃行,而不涉及条件表达式?
Why is an Access query dropping rows due to an empty string in a column, not involved in the conditional expression?
所以我在 table 中有 12 行,3 行 MetricParent = 'Begin!',3 行 MetricParent = Null,另外 6 行 MetricParent = 'someValue'。在一个非常简单的查询中,删除了 MetricParent = Null 的三行,查询 returns 只有 6 行,但它应该 return 9.
SELECT Metrics.ID, Metrics.ApplicationName, Metrics.UserName, Metrics.MetricName, Metrics.MetricParent, Metrics.StartTime, Metrics.EndTime FROM Metrics WHERE MetricParent <> 'Begin!'
MetricParent 字段是大小为 255 的 ShortText,必需否,允许零长度是,索引否,...
没有其他必填字段或索引字段接受 Metrics.ID 所有 12 行都具有合法值
为什么此查询仅 returning 6 行,并删除 MetricParent = Null 的行
我已经看到我可以使用两种方法中的一种来解决问题,方法是包括一个附加条件:“Or MetricParent is Null”或者通过将字段包装在 select 列表中并将条件与 Nz 包装起来:
即 Nz(MetricParent,'') 但肯定这不是必需的,它不是必需的字段。
谁能解释一下为什么我需要明确说明这一点?
MetricParent 既是“returned filed”(即出现在 select 子句中)又是“涉及条件表达式”(即出现在 where 子句中) .
As far as Access is concerned, Null doesn't equal anything. You can't
use the Equals operator (=) to find null values. Nor can you use the
Inequality operator (<>) to exclude them. (This isn't always true
outside Access.) 10 tricks for handling null values in Microsoft Access
您在 where 子句中使用了 MetricParent,因此如果您希望 return 值包含 MetricParent 为空的行,则需要显式包含它们(即 WHERE MetricParent <> 'Begin!' 或 MetricParent 为空)。
所以我在 table 中有 12 行,3 行 MetricParent = 'Begin!',3 行 MetricParent = Null,另外 6 行 MetricParent = 'someValue'。在一个非常简单的查询中,删除了 MetricParent = Null 的三行,查询 returns 只有 6 行,但它应该 return 9.
SELECT Metrics.ID, Metrics.ApplicationName, Metrics.UserName, Metrics.MetricName, Metrics.MetricParent, Metrics.StartTime, Metrics.EndTime FROM Metrics WHERE MetricParent <> 'Begin!'
MetricParent 字段是大小为 255 的 ShortText,必需否,允许零长度是,索引否,... 没有其他必填字段或索引字段接受 Metrics.ID 所有 12 行都具有合法值
为什么此查询仅 returning 6 行,并删除 MetricParent = Null 的行 我已经看到我可以使用两种方法中的一种来解决问题,方法是包括一个附加条件:“Or MetricParent is Null”或者通过将字段包装在 select 列表中并将条件与 Nz 包装起来: 即 Nz(MetricParent,'') 但肯定这不是必需的,它不是必需的字段。
谁能解释一下为什么我需要明确说明这一点?
MetricParent 既是“returned filed”(即出现在 select 子句中)又是“涉及条件表达式”(即出现在 where 子句中) .
As far as Access is concerned, Null doesn't equal anything. You can't use the Equals operator (=) to find null values. Nor can you use the Inequality operator (<>) to exclude them. (This isn't always true outside Access.) 10 tricks for handling null values in Microsoft Access
您在 where 子句中使用了 MetricParent,因此如果您希望 return 值包含 MetricParent 为空的行,则需要显式包含它们(即 WHERE MetricParent <> 'Begin!' 或 MetricParent 为空)。