我在SQLite(3.7.16.2)中发现了以下限制(?):
想象一下以下架构:
CREATE TABLE t1 (v);
CREATE TABLE t2 (v);
如果a有这样的子查询,
SELECT *, (SELECT COUNT() FROM t2 WHERE t2.v = t1.v) FROM t1;
它有效,这意味着在t2
上的子查询中,您可以引用外部查询(在t1
)列。
然而,
SELECT *, (SELECT COUNT() FROM t2 LIMIT t1.v) FROM t1;
或
SELECT *, (SELECT COUNT() FROM t2 LIMIT 1 OFFSET t1.v) FROM t1;
失败,错误为Error: no such column: t1.v
。
这意味着OFFSET
和LIMIT
子句中的表达式不能引用外部查询中的列。
此行为是否是SQLite引擎的限制?
或者我错过了一些观点?
答案 0 :(得分:1)
到目前为止,这确实是所有SQLite版本的限制。
(OFFSET
/ LIMIT
是非标准扩展名,因此未指定是否允许此扩展名。)