我正在尝试定义一个 SQL 语句以用作 MSAccess 表单上 ComboBox 的行源。SQL 应该从表 tblI 中选择记录,其中特定表字段与用户设置的变体参数 varS 匹配;然而,如果 varS 为 Null 或不存在于另一个表 tblS 中,则 SQl 应选择 tblI 中的所有记录。
我可以编写此代码的第一部分(varS 匹配或为空):
SELECT tblI.ID, tblI.S FROM tblI WHERE ((tblI.S = varS) OR (varS Is Null)) ORDER BY tblI.ID;
我正在努力的地方是合并最后一个元素(varS 不存在于 tblS 中)。我可以为 tblS 中没有 varS 编写一个测试:
Is Null(DLookup("[tbls.ID]","tblS","[tblS.ID]= " & varS))
但我不知道如何将其合并到 SQL 语句中。这应该工作吗?
SELECT tblI.ID, tblI.S FROM tblI WHERE tblI.S = varS OR varS Is Null OR DLookup("[tbls.ID]","tblS","[tblS.ID]= " & varS) Is Null ORDER BY tblI.ID;
当作为查询运行时,无论 varS 的值如何,它都会返回 tblS 中的每条记录。
表结构:
tblI 包含 2 个字段,Autonumber ID 和 Long S
tblS 包含 1 个字段,自动编号 ID