"sasha" ...
>
> Я тут мудрил, химичил, деже небольшой Featuire request в трекер написал,
> но тем не меннее нормального пути так и не нашёл.
>
> Задача простая - ограничить "глубину" возвращаемого дерева.
>
> Если написать так:
>
> WITH RECURSIVE TR AS (
> SELECT T.*, 1 AS LEV FROM "Tree" T WHERE PARENT_ID IS NULL
> UNION ALL
> SELECT T.*, TR.LEV + 1 AS LEV FROM "Tree" T, TR WHERE PARENT_ID = TR.ID)
> SELECT ID, LEV FROM TR WHERE LEV <= 1
>
> То совсем кака получается, т.к. сервер все дерево строит, а потом фильтрует.
Угу
> Если написать так:
>
> WITH RECURSIVE TR AS (
> SELECT T.*, 1 AS LEV FROM "Tree" T WHERE PARENT_ID IS NULL
> UNION ALL
> SELECT T.*, TR.LEV + 1 AS LEV FROM "Tree" T, TR WHERE PARENT_ID =
> TR.ID AND TR.LEV < 1)
> SELECT ID, LEV FROM TR
Так правильнЕе
> то получается меньшая, но всё ещё кака, т.к. на листьях много лишних
> движений (у меня например в простейшем примере на 3 результирующих
> записи сервер проситал аж 7). Об этом я в трекер написал:
> http://tracker.firebirdsql.org/browse/CORE-1287
Угу, только нифига не понятно ты там написал
> Может у кого есть идея как ещё такой CTE написать чтобы быстрее было?
Я хотел дать возможность ограничить глубину декларативно :
WITH RECURSIVE [MAX LEVEL N]
но баба яга была против
--
Хорсун Влад