访问LookUp表

时间:2011-06-02 14:59:58

标签: ms-access lookup-tables

我需要在Access中创建一个查找表,其中所有缩写都与一个值相关,如果缩写(在主表中)为null,那么我想显示“Unknown”

我得到了值,但我似乎无法显示空值。

我的查找表如下所示:

REQUEST     REQUEST_TEXT
------------------------
A           Approve
D           Disapprove
NULL        N/A

但是当我按要求进行计数时,它只显示A和D的值,尽管我知道那里也有一些空白。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果更改tblLookup,这应该会更容易。

REQUEST     REQUEST_TEXT
------------------------
A           Approve
D           Disapprove
U           Unknown

然后,在tblMain中,将REQUEST字段更改为Required = True,默认值=“U”。添加新记录时,除非用户将其更改为A或D,否则它们将具有U for REQUEST。

然后在REQUEST上加入2个表的查询应该能得到你想要的东西。

SELECT m.REQUEST, l.REQUEST_TEXT
FROM tblMain AS m
    INNER JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

您还应该在2个表之间创建关系,并选择强制参照完整性的选项,以防止用户为REQUEST添加虚假值,例如“X”。

修改: 如果更改tblMain结构不在表中,并且如果您在Access会话中执行此操作,则可以在LEFT JOIN上使用Nz()函数。

SELECT m.REQUEST, Nz(l.REQUEST_TEXT, "Unknown")
FROM tblMain AS m
    LEFT JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

如果您从Access外部执行此操作,例如从ASP,则Nz()函数将不可用。因此,您可以将IIf()表达式替换为Nz()。

SELECT m.REQUEST, IIf(l.REQUEST_TEXT Is Null, "Unknown", l.REQUEST_TEXT)
FROM tblMain AS m
    LEFT JOIN tblLookup AS l
    ON l.REQUEST = m.REQUEST;

Edit2 :您无法直接使用Null值加入。但是对于我为tblLookup建议的“未知”行,你可以使用一个包含Nz的JOIN来实现tblMain.REQUEST

SELECT m.id, m.request, l.request_text
FROM tblMain AS m
    INNER JOIN tblLookup AS l
    ON Nz(m.request,"U") = l.request;

如果你想将tblLookup REQUEST保留为REQUEST_TEXT = Unknown的Null,我想你可以在JOIN表达式的两边使用Nz。然而,加入Nulls的整个想法让我感到畏缩。我会修改表格。