2013-10-10 2 views
1

я нашел следующее ограничение в 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?

Или я пропустил какой-то пункт?

ответ

1

Это действительно ограничение во всех версиях SQLite. (OFFSET/LIMIT является нестандартным расширением, поэтому не указывается, разрешено ли это.)

+0

Является ли это документированным ограничением или ошибкой? 'LIMIT' позволяет использовать все типы других выражений, таких как подзапросы, поэтому только этот тип выражения не поддерживается, кажется странным. –

+0

Это ни документировано, ни ошибка, так как SQLite реализуется. –

+0

Что отличается в коде оценки выражения, относящемся к 'LIMIT', по сравнению с другим кодом оценки выражения? –

Смежные вопросы