使用WHERE返回Null

时间:2010-12-21 15:01:57

标签: sql ms-access

我对使用SQL的Access有一个非常基本的查询,但是如果没有返回任何内容,我想让它恢复Null。

例如,如果我陈述

WHERE Cust_ID = "win"

如果查询没有“获胜”,则返回Null。

我原本以为我可以使用ISNULL,但却没有设法让它发挥作用。

先谢谢Zane

6 个答案:

答案 0 :(得分:2)

它返回一个空集,而不是NULL。如何确定集合是空还是填充将取决于您用于与数据库交互的客户端软件。您可以计算ADO.NET中的行数以查看计数是否为零。

答案 1 :(得分:1)

考虑使用DLookup()而不是记录集。在记录集只是空的情况下,DLookup()将返回Null:

  DLookup("LastName","tblInventory","[InventoryID]=-1")

由于我的tblInventory没有InventoryID为-1的记录,因此返回Null。

相同的SQL语句:

  SELECT LastName FROM tblInventory WHERE InventoryID=-1;

...返回一个空的记录集。

所以,在我看来,DLookup()做了你想要的。它也不需要任何代码,可以用作表单或报表上的控件的ControlSource。

答案 2 :(得分:0)

如果where条件失败,要获得空值,则需要围绕列定义或左外连接而不是where子句执行case语句。

iif(Cust_id = "win", "win", null) 

LEFT OUTER JOIN tablename on
tablename.cust_id = "win"

应该有效 - 但我没有Access可供检查。

答案 3 :(得分:0)

我不确定这是否适用于Access,但是如果您不介意在结果中始终使用NULL,则可以尝试在您的语句中附加“UNION ALL SELECT NULL”。

答案 4 :(得分:0)

查询始终返回记录集,该记录集大致对应于记录列表。如果没有符合条件的记录,则返回空列表,这与NULL不同。

示例:

Set rset = ...   ' Execute your query here '
If rset.EOF Then
    ... ' No records found '
Else
    ... ' Loop through the rset with rset.MoveNext until rset.EOF is true '
End If

答案 5 :(得分:0)

如果没有记录符合条件,则不会返回任何记录。你可以通过在一个记录表中加入来欺骗系统做你想做的事情。但是,为什么你想要这种奇怪的行为而不是常规(而且,在我看来,更明智的是)在没有任何匹配的情况下缺乏任何结果。