我想知道我能否在 ms access 数据库中使用的 iif 函数中运行查询。我的情况
Select field1,(iif(3<4,'Select * from tbl1','select * from tbl2')) from tblmain
当我尝试执行这样的查询时遇到语法错误是什么问题
我想知道我能否在 ms access 数据库中使用的 iif 函数中运行查询。我的情况
Select field1,(iif(3<4,'Select * from tbl1','select * from tbl2')) from tblmain
当我尝试执行这样的查询时遇到语法错误是什么问题
从您的示例查询中不清楚您想要实现的目标。
您可以在 Access 查询中使用 IIF 函数,例如:
SELECT IIF([SomeField]<15, "Smaller than 15", "Greater than!") As Whatever
FROM myTable
您也可以在 Access 中使用子选择,例如(例如从http://allenbrowne.com/subquery-01.html无耻地窃取的示例):
SELECT MeterReading.ID, MeterReading.ReadDate, MeterReading.MeterValue,
(SELECT TOP 1 Dupe.MeterValue
FROM MeterReading AS Dupe
WHERE Dupe.AddressID = MeterReading.AddressID
AND Dupe.ReadDate < MeterReading.ReadDate
ORDER BY Dupe.ReadDate DESC, Dupe.ID) AS PriorValue
FROM MeterReading;
请注意,必须保证指定的子选择查询返回单个记录 - 通过指定 TOP 1 或使用聚合函数 - 并且必须链接回 WHERE 子句中的父查询。
但是,即使您的子选择有效,也不能按照您在问题中尝试的方式使用 IIF 语句,但事实并非如此。
建议有两个选项,尽管我不太清楚你在这里想要实现什么。首先,您可能要考虑改为在 VBA 中执行此操作。就像是:
const query1 As String = "Select * from tbl1"
const query2 As String = "select * from tbl2"
Dim recset as DAO.Recordset
set recset = CurrentDB.OpenRecordset(iif(3<4, query1, query2))
或者,如果 tbl1 和 tbl2 具有相同的字段,您可以执行以下操作:
SELECT * FROM tbl1 WHERE 3<4
UNION ALL
SELECT * FROM tbl2 WHERE NOT (3<4)
如果您将 3<4 替换为您正在检查的任何实际条件,您将只能从一个或另一个或查询中获取记录,而不会同时获取两者。但是,我怀疑如果您需要这样做,您的数据库可能存在设计问题 - 我可以想到许多需要这样做的可疑场景,并且很少有有效的场景,尽管我确信它们存在。