我有一个MS Access数据库,其中包含一个名为Sex的字段。该字段可以有3个值,通过查找选择:
Unknown
Male
Female
我有一个搜索表单,它将搜索值传递给查询。
当您搜索Unknown
时,查询应返回:Unknown
,Male
,Female
(即全部返回,因为主题的实际性别可能是任何内容)
当您搜索Male
时,查询应返回:Unknown
,Male
(因为任何Unknown
性别实际上可能是男性)
当您搜索Female
时,查询应返回:Unknown
,Female
这可能在Design Query视图中,还是需要使用SQL?
答案 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”变量时,只有一个(三分之一)子查询将返回记录集。