MS Access (Jet/ACE)中的无表UNION查询
在使用Jet/ACE数据库引擎的Microsoft Access中,尝试使用UNION查询而没有指定表数据源时,可能会遇到错误。将出现错误消息“查询输入必须至少包含一个表或查询”。
此限制源于引擎对FROM子句中至少一个表或查询的要求,即使未使用该数据源中的任何字段也是如此。要克服这个问题,您可以使用始终包含单行的虚拟表。
创建虚拟表
<code>Public Sub CreateDualTable() Dim strSql As String strSql = "CREATE TABLE Dual (id COUNTER CONSTRAINT pkey PRIMARY KEY);" Debug.Print strSql CurrentProject.Connection.Execute strSql strSql = "INSERT INTO Dual (id) VALUES (1);" Debug.Print strSql CurrentProject.Connection.Execute strSql strSql = "ALTER TABLE Dual" & vbNewLine & _ vbTab & "ADD CONSTRAINT there_can_be_only_one" & vbNewLine & _ vbTab & "CHECK (" & vbNewLine & _ vbTab & vbTab & "(SELECT Count(*) FROM Dual) = 1" & vbNewLine & _ vbTab & vbTab & ");" Debug.Print strSql CurrentProject.Connection.Execute strSql End Sub</code>
使用虚拟表
使用虚拟表,您现在可以创建无表UNION查询:
<code>SELECT "foo" AS my_text FROM Dual UNION ALL SELECT "bar" FROM Dual;</code>
替代方法
或者,您可以使用带有TOP 1或WHERE子句的SELECT语句将结果集限制为单行。
请注意,检查约束仅在通过ADO(CurrentProject.Connection.Execute)执行的语句中可用。DAO(CurrentDb.Execute)不支持创建检查约束。
以上是如何在 MS Access 中执行无表 UNION 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!