“查询输入必须至少包含一个表或查询”错误 - 嵌套查询,MS Access

zap*_*ask 4 ms-access nested

本质上,我们有时(?)需要提供对表的引用,即使我不需要它。例如 查询输入必须包含至少一个表或查询

我的问题是为什么查询 q1SELECT 1执行得很好,并给了我 1 row-1 列结果表,其中 1 作为值,但查询 q2SELECT * FROM q1会产生上述错误?

当我将 q1 更改为SELECT 1 from dummy_tabledummy_table 是具有虚拟值的虚拟表时,q2 运行良好。

为什么 q1 的内部结构与 q2 有任何关系?q1 本身就很好用。q2 是否“展开” q1 然后编译语句 SELECT * FROM (SELECT 1)(它本身会产生相同的错误)。我可以以某种方式强制 Access 不窥视父母的内部结构吗?另外为什么SELECT * FROM (SELECT 1)会出现错误并且SELECT 1工作正常?

Han*_*sUp 6

FROM当“naked”单独使用时,Access 将只接受没有子句的查询,而SELECT不是作为另一个查询的一部分。

正如您所发现的,SELECT 1当它是整个语句时是有效的。但是 Access 会抱怨“查询输入必须至少包含一个表或查询”,如果您尝试SELECT在另一个查询中使用该“裸” ,例如SELECT q.* FROM (SELECT 1) AS q;

同样,虽然SELECT 1SELECT 2单独使用时都有效,但尝试使用UNION它们会触发相同的错误:

SELECT 1
UNION ALL
SELECT 2
Run Code Online (Sandbox Code Playgroud)

没有办法规避这个错误。正如您还发现的,将“裸”保存SELECT为命名查询,然后在另一个中使用命名查询仍然会触发错误。这只是 Access db 引擎的一个限制,我使用过的每个 Access 版本(>= Access 2000)都是如此。