基本上我们有时(?)需要提供对表的引用,即使我不需要它。例如。 Query input must contain atleast one table or query
我的问题是为什么查询q1 SELECT 1
执行得很好并且给我1行-1列结果表,其中1为值,但查询q2 SELECT * FROM q1
会产生上述错误?
当我将q1更改为SELECT 1 from dummy_table
时,其中dummy_table是具有虚拟值的虚拟表,q2运行正常。
为什么q1的内部结构与q2有任何关系? q1自己的工作就好了。 q2是否“展开”q1然后编译一个语句
SELECT * FROM (SELECT 1)
(它本身会产生相同的错误)。我可以以某种方式强制Access不要窥视父母的内部结构吗?
另外,为什么SELECT * FROM (SELECT 1)
会出错并且SELECT 1
工作正常?
答案 0 :(得分:2)
访问只接受没有FROM
条款的查询,当#34;裸体" SELECT
是独立使用的,而不是另一个查询的一部分。
正如您所发现的那样,SELECT 1
在整个语句中有效。但Access抱怨"如果您尝试使用"裸&在SELECT
SELECT q.* FROM (SELECT 1) AS q;
同样,虽然SELECT 1
和SELECT 2
在单独使用时都有效,但尝试UNION
它们会触发相同的错误:
SELECT 1
UNION ALL
SELECT 2
没有办法规避这个错误。正如你也发现的那样,拯救"裸体" SELECT
作为命名查询,然后在另一个中使用命名查询仍会触发错误。它只是Access数据库引擎的一个限制,而且我使用的每个Access版本(> = Access 2000)都是这样。