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 AScolumnname
UNION SELECT value2 UNION SELECT value3 ... UNION SELECT value999【参考方案2】:
您使用的 SELECT 数量没有限制。您需要做的就是检查列列表是否与 INSERT 列匹配。
【讨论】:
在 sqlite 中,select 语句的数量有限制,请正确检查...以上是关于SQLite 错误:复合 SELECT 中的术语太多的主要内容,如果未能解决你的问题,请参考以下文章
sqlite 中的“TYPE_FORWARD_ONLY”错误