деревянная задачка про connectby

Собственно цель простая - вывести иерархическую таблицу в порядке иерархии
CREATE TABLE foo(ID,ParentID,Caption)

node000
node010
node020
node021
node100
node110
node200
...

У меня есть рекурсивная процедура, которая легко все это делает, но я вот наткнулся на функцию connectby и захотелось сделать с ее помощью, но она возвращает иерархию только одного родителя, а мне нужно все.

Самое простое сделать так

declare
  id1 text;
begin
FOR id1 IN SELECT id::text FROM foo WHERE ParentID IS NULL
loop
RETURN QUERY
  SELECT * 
    FROM foo JOIN
        connectby('foo','ID','ParentID','Caption',   id1  ,0) 
                AS cb(keyid int, parent_keyid int, level int,  pos int)
      ON foo.id=cb.keyid
end loop;
 
end;

Может можно как-то без цикла одним запросом?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

выкрутился

выкрутился так:

connectby('foo','ID','coalese(ParentID,0)','Caption','0',0) 

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023