SQLite 错误:复合 SELECT 中的术语太多

Posted

技术标签:

【中文标题】SQLite 错误:复合 SELECT 中的术语太多【英文标题】:SQLite error: too many terms in compound SELECT 【发布时间】:2012-03-20 15:14:08 【问题描述】:

当我在 sqlite 数据库文件中插入太多数据时,会出现错误“复合 SELECT 中的术语太多”。我使用“insert into ... select ... union select ... union ...”。我知道选择语句太多,但我的问题是:复合 SELECT 语句中的最大术语数是多少?

【问题讨论】:

最后的解决办法是什么? 【参考方案1】:

复合 SELECT 语句是由运算符 UNION、UNION ALL、EXCEPT 或 INTERSECT 连接的两个或多个 SELECT 语句。我们将复合 SELECT 中的每个单独的 SELECT 语句称为“术语”。

SQLite 中的代码生成器使用递归算法处理复合 SELECT 语句。为了限制堆栈的大小,我们因此限制了复合 SELECT 中的项数。最大术语数是 SQLITE_MAX_COMPOUND_SELECT,默认为 500。我们认为这是一个慷慨的分配,因为在实践中我们几乎从未见过复合选择中的术语数超过个位数。

可以使用 sqlite3_limit(db,SQLITE_LIMIT_COMPOUND_SELECT,size) 接口在运行时降低复合 SELECT 项的最大数量。

更多详情请查看此... http://www.sqlite.org/limits.html

【讨论】:

@shobi 因为旧版本的 sqlite (500 个 UNION 术语的解决方法结束,例如 INSERT INTO tablename (columnname) SELECT value1 AS columnname UNION SELECT value2 UNION SELECT value3 ... UNION SELECT value999【参考方案2】:

您使用的 SELECT 数量没有限制。您需要做的就是检查列列表是否与 INSERT 列匹配。

【讨论】:

在 sqlite 中,select 语句的数量有限制,请正确检查...

以上是关于SQLite 错误:复合 SELECT 中的术语太多的主要内容,如果未能解决你的问题,请参考以下文章

Yesod中的复合主键

什么是mysql中的复合外键?

sqlite 中的“TYPE_FORWARD_ONLY”错误

带有 FTS4 表的 sqlite3:查询返回错误的行

SQLite INSERT 和 DELETE 查询给出错误,但不是 SELECT 查询

Python Sql 代码错误 - sqlite3.OperationalError: SQL 变量太多