在MS Access查询中使用“未知”值来返回所有记录值

时间:2014-02-26 09:38:06

标签: ms-access

我有一个MS Access数据库,其中包含一个名为Sex的字段。该字段可以有3个值,通过查找选择:

Unknown Male Female

我有一个搜索表单,它将搜索值传递给查询。

当您搜索Unknown时,查询应返回:UnknownMaleFemale(即全部返回,因为主题的实际性别可能是任何内容)

当您搜索Male时,查询应返回:UnknownMale(因为任何Unknown性别实际上可能是男性)

当您搜索Female时,查询应返回:UnknownFemale

这可能在Design Query视图中,还是需要使用SQL?

1 个答案:

答案 0 :(得分:2)

如果您不想在查询中对可能的值进行硬编码,可以使用一个简单的技巧:使用您需要的匹配值创建一个新的小表。

例如,您可以创建一个如下所示的新表:

SEX_COND - A table with two columns, for the matching values:

V   V_NEW
-   -----
M   M
M   U
F   F
F   U
U   M
U   F
U   U

因此,您可以使用QBE或SQL编写简单查询,方法是连接两个表(SEX和SEX_COND)并过滤新表列。

使用SQL:

SELECT *
FROM YOUR_TABLE_WITH_SEX_COL
WHERE SEX IN (SELECT V_NEW
              FROM SEX_COND
              WHERE V = 'your_sex_value_to_be_filtered');

如果要使用QBE,可以指定以下条件(通常指定过滤条件):

In (SELECT V_NEW FROM SEX_COND WHERE V = 'M')

如果你不想创建一个新表,你可以使用另一个技巧(三个性别值硬编码):

SELECT *
FROM YOUR_TABLE_WITH_SEX_COL
WHERE SEX IN ('M', 'U') AND 'your_value' = 'M'
UNION ALL
SELECT *
FROM YOUR_TABLE_WITH_SEX_COL
WHERE SEX IN ('F', 'U') AND 'your_value' = 'F'
UNION ALL
SELECT *
FROM YOUR_TABLE_WITH_SEX_COL
WHERE 'your_value' = 'U';

将值传递给“your_value”变量时,只有一个(三分之一)子查询将返回记录集。