从 MS-Access 中联合选择查询中的 SQLite 语法错误

Posted

技术标签:

【中文标题】从 MS-Access 中联合选择查询中的 SQLite 语法错误【英文标题】:SQLite Syntax Error In Union Select Query From MS-Access 【发布时间】:2011-11-30 16:37:37 【问题描述】:

在一个全新的 MS Access 2010 数据库中,我使用 ODBC 连接从 SQLite 数据库链接到两个表。我有以下联合查询:

SELECT Calibration_Header.Gage_ID FROM Calibration_Header
UNION SELECT CHArchive.Gage_ID FROM CHArchive;

如果我使用 sqlite3 命令行应用程序对同一个数据库执行此 SQL,它会成功运行并返回正确的数据。当我在 MS Access 2010 数据库中运行查询时,我收到以下错误消息:

ODBC--call failed.

near "(": syntax error (1) (#1)

针对不同表的其他联合查询在 MS Access 中运行时会收到相同的错误消息。在 sqlite3 命令行中运行时,它们运行成功并返回正确的数据。

【问题讨论】:

感谢您的信息。这针对的前端数据库将能够使用 Access 或 SQLite 作为后端数据库,因此传递查询并不理想。 联合查询不是最终应用程序的标准解决方案。也许你可以多说一点你想做的事情,有人可能会提供横向解决方案? 记录可以存档,这会将它们从常规表中取出并放入存档表中。表单中的多个组合框需要能够查看所有记录的量具 ID,无论是存档的还是未存档的。联合查询是驱动那些组合框。我可以创建每次打开表单时都会填写的临时表,但这是我希望避免的开销。 【参考方案1】:

我怀疑 UNION SELECT 不是标准的 Access 白话。您可以尝试在 Access 2010 中实现 ANSI-92,然后将查询作为代码运行,如 Albert Kallal 在http://www.utteraccess.com/forum/Create-View-Access-t1924479.html&p=1924500#entry1924500 中所述。我使用这些说明成功创建了一个 Access“视图”。

【讨论】:

UNION SELECT 是标准访问。那里没有问题。我认为问题在于 Access 在处理源表的外部链接时使用 Union 时遇到问题。在这种情况下,OP 的“存档表”(或我称之为暂存表)的想法会更好。【参考方案2】:

我意识到这是一个非常古老的线程,但我刚刚遇到了这个问题并找到了一个非常简单的解决方案,所以认为值得分享以防其他人遇到问题。尽管 Access 似乎无法对两个链接表运行 UNION 查询,但如果您创建一个传递查询并将 UNION 的 SQL 放入其中,它就可以正常工作。据推测,SQL 然后由 SQLite 执行,结果作为单个结果集返回,而不是 Access 本身试图将 UNION 应用于两个单独的结果集。

我无法在早期版本中进行测试,但它可以在 Access 2016 中使用。

【讨论】:

以上是关于从 MS-Access 中联合选择查询中的 SQLite 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

创建 XML 文件时在 SQL 中联合

在 SQL Server 中联合所有的替代方案

mybatis中联合查询

DB2 中联合查询的重复数据删除

Ariadne 中联合类型的解析器函数

如何在mysql中联合后获取最小值?