Jet/ACE 数据库引擎中的 UNION 查询错误:缺少表或查询
问题:
在执行不包含表源的 UNION 查询时,可能会遇到错误“Query input must contain at least one table or query”。
例如,以下查询有效:
<code class="language-sql">SELECT "Mike" AS FName</code>
但是,尝试使用以下查询联合多行则会失败:
<code class="language-sql">SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName</code>
解决方案:
这不是 Jet/ACE 数据库引擎的错误或限制。要对多行执行 UNION 或 UNION ALL 操作,必须包含 FROM 子句,即使您没有引用该数据源中的任何字段。
示例:
您可以使用只有一行的表作为虚拟表,例如:
<code class="language-vba">Public Sub CreateDualTable() Dim strSql As String strSql = "CREATE TABLE Dual (id COUNTER CONSTRAINT pkey PRIMARY KEY);" CurrentProject.Connection.Execute strSql End Sub</code>
然后,您可以在 UNION 查询中使用此表:
<code class="language-sql">SELECT "Mike" AS FName FROM Dual UNION ALL SELECT "John" AS FName FROM Dual;</code>
替代方法:
或者,您可以使用带有 TOP 1 或 WHERE 子句的 SELECT 语句,将结果集限制为一行:
<code class="language-sql">SELECT TOP 1 "Mike" AS FName FROM (SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName) AS SubQuery SELECT "Mike" AS FName FROM (SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName) AS SubQuery WHERE ID = 1</code>
以上是为什么我的 UNION 查询会导致'查询输入必须至少包含一个表或查询”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!