я нашел следующее ограничение в SQLite (3.7.16.2) (?):OFFSET и LIMIT выражения область применения
Представьте себе следующую схему:
CREATE TABLE t1 (v);
CREATE TABLE t2 (v);
Если есть подзапрос, как это,
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?
Или я пропустил какой-то пункт?
Является ли это документированным ограничением или ошибкой? 'LIMIT' позволяет использовать все типы других выражений, таких как подзапросы, поэтому только этот тип выражения не поддерживается, кажется странным. –
Это ни документировано, ни ошибка, так как SQLite реализуется. –
Что отличается в коде оценки выражения, относящемся к 'LIMIT', по сравнению с другим кодом оценки выражения? –