MS ACCESS 2016 - 使用 Null 进行查询的标准

Posted

技术标签:

【中文标题】MS ACCESS 2016 - 使用 Null 进行查询的标准【英文标题】:MS ACCESS 2016 - Criteria for Query using Null 【发布时间】:2017-01-31 10:17:36 【问题描述】:

请帮忙,我遇到了以下问题: 我在 MS access 2016 中有一个表,其中包含以下数据:

字段 空值 空值 空值 21 21 空

我的目标是在我的条件为 21 时返回等于 21 的记录,但如果我的条件是例如 22 或不在该字段中的任何其他数字,我只想返回空记录 - 我已经尝试过 IIF( [Field]=21,21,Null) 如果条件为 21,则可以正常工作,但不返回任何记录 IIF([Field]=22,22,Null)

我怀疑嵌套的 IIF 语句可能会有所帮助,但到目前为止还没有成功

任何帮助将不胜感激

【问题讨论】:

如果您尝试 IIF([Field]=22 AND NOT(IsNull([Field])),22,Null) 会怎样? 谢谢,但是没有用,我也一直在尝试 SWITCH 功能,但结果也不尽如人意 - SWITCH([Field]=22,22,[Field]=Null, Null,true,空)无济于事 【参考方案1】:

Where 子句应改为:

WHERE Field = [Criteria] or (IsNull(Field) And Not Exists (select * from Table where Field = [Criteria])=True)

【讨论】:

感谢您的建议,但这似乎也不起作用,产生与 if 语句相同的结果 - 也许我需要稍后在代码中处理该问题,使用自定义函数或调查 if表中有空值的替代方法 嗯。访问有点挑剔!试试这个:WHERE Field = [Criteria] or (IsNull(Field) And Not Exists (select * from Table where Field = [Criteria])=True) [原始答案已编辑以反映此更改]【参考方案2】:

您的问题似乎是 (Field = Null) 不等于 (Field is Null),因此它不能在 IIf 子句中使用,您需要一个额外的条件来获取空值。我在 MS Access sql 编辑器中使用以下 SQL 代码实现了预期的结果,但是当我选择设计器视图时,如果您不介意,它会在两个条件条件下“拆分”。试试看是否适合你

SELECT *
FROM Table1
WHERE
Table1.Field1 = [Criteria] 
or
Table1.Field1 is null and 
not exists
(SELECT *
FROM Table1
WHERE
Table1.Field1 = [Criteria])

【讨论】:

【参考方案3】:

感谢大家的帮助,我认为“不退出(选择 ...)”可以正常工作,但还有许多其他条件适用于表中的其他字段,因此第二个 select 语句会变得太大(对我来说!) - 但是我的解决方案如下

由于我使用 SQL where 子句作为在 VBA 中调用的记录集的条件,我使用 dcount 函数来查看条件 =21 是否在数据集中,然后使用 if 语句调用一个基于[Filed]=21 和另一个如果 [Field] 为空 - 不性感但效果很好

抱歉格式化和所有错别字 - 我在这里的第一篇文章

【讨论】:

以上是关于MS ACCESS 2016 - 使用 Null 进行查询的标准的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:Access 2016 应用程序能否与 Access 2007 一起使用?

具有用户定义字段的 MS Access PIVOT

选项卡式控件上的 MS Access 2007 引用子窗体控件返回 null

将 null 插入 MS Access 中的日期/时间字段-

MS Access VBA - 不知何故没有通过 OpenArgs,总是 NULL

DAO.DBEngine 类不再使用 Windows 10 在 MS Access 2016 中注册