"sasha" ...
>
> Я тему CTE как-то забросил, а тут решил снова поковыряться ине получилось.
>
> Вот уменя таблица Phases, смотрите:
>
> Id ParentPhaseId
> -----------------------
> 491 NULL
> 494 491
> 497 494
> 498 NULL
>
>
> Запрос:
>
> WITH RECURSIVE
> "RootPhases" AS (
> SELECT P."Id", P."ParentPhaseId" FROM "Phases" P WHERE
> P."ParentPhaseId" IS NULL
> ),
> "NonRootPhases" AS (
> SELECT P."Id", P."ParentPhaseId" FROM "Phases" P, "RootPhases" P1
> WHERE P."ParentPhaseId" = P1."Id"
> )
> SELECT * FROM "RootPhases"
> UNION ALL
> SELECT * FROM "NonRootPhases"
А где ты тут видишь рекурсивный запрос-то ? :)))
> Ясли я что-то неправильно сделал,
Лыжи работают праально, проверяй вторую часть гипотезы ;)
> поправьте пожалуйста.
WITH RECURSIVE
"Tree" AS (
SELECT P."Id", P."ParentPhaseId" FROM "Phases" P
WHERE P."ParentPhaseId" IS NULL
UNION ALL
SELECT P."Id", P."ParentPhaseId" FROM "Phases" P, "Tree" P1
WHERE P."ParentPhaseId" = P1."Id"
)
SELECT * FROM "Tree"
> Если правильно, то имею две претензии:
>
> 1) Записи глубже второго уровня не выбирает
Ибо ты написал 2 запроса на выборку 1-го и 2-го уровней
> 2) Порядок возвращённых результатов никак не похож на рекурсивный. Для
> меня важно чтобы был в порядке вложенности элементов:
Это обсуждаться не будет, не зависимо от того устраивает ли текущий
порядок обхода дерева (в глубину) кого-либо или нет.
По крайней мере в 2.1 и в 3.0
Впрочем в данном случае тебя должно устраивать ;)
--
Хорсун Влад