"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 Впрочем в данном случае тебя должно устраивать ;) -- Хорсун Влад