WITH RECURSIVE question

Поиск
Список
Период
Сортировка
От Marc Mamin
Тема WITH RECURSIVE question
Дата
Msg-id C4DAC901169B624F933534A26ED7DF310861B622@JENMAIL01.ad.intershop.net
обсуждение исходный текст
Ответы Re: WITH RECURSIVE question  (Andreas Kretschmer <akretschmer@spamfence.net>)
Re: WITH RECURSIVE question  (hubert depesz lubaczewski <depesz@depesz.com>)
Список pgsql-general
Hello,

WITH RECURSIVE queries are quite new for me, so I'm not sure if
following is possible



CREATE TEMP TABLE forest (node int,parent int);
INSERT INTO  forest VALUES
(1, null),
(2, 1),
(3, 2),
(4, null),
(5, 4),
(6,5);


WITH RECURSIVE struc (pref, id, depth ) AS (
  SELECT '', node, 1 from forest where node= 4
  UNION ALL
  SELECT (case when struc.pref= '' then '\' else struc.pref end )||
'...' ,
         node,
         struc.depth +1
  FROM forest JOIN struc ON parent=struc.id
  )
  SELECT * FROM struc;

 (path,node,depth)
           4  1
  \...     5  2
  \......  6  3

This is fine as long as I start with a given node (here node= 4).

But How can I retrieve the complete structure in one query ?
do I have to use a procedure for that ?

Something like :

WITH FOR_EACH (node) AS ( SELECT node from forest where parent IS NULL)
SELECT * FROM (
  WITH RECURSIVE struc (pref, id, depth ) AS (
    SELECT '', node, 1 from forest where node= FOR_EACH.node
    UNION ALL
    SELECT (case when struc.pref= '' then '\' else struc.pref end )||
'...' ,
           node,
           struc.depth +1
    FROM forest JOIN struc ON parent=struc.id
    )
    SELECT * FROM struc
)one_tree
;

           1  1
  \...     2  2
  \......  3  3
           4  1
  \...     5  2
  \......  6  3


best regards,

Marc Mamin

В списке pgsql-general по дате отправления:

Предыдущее
От: Craig Ringer
Дата:
Сообщение: Re: hstore for audit logging: Finding differences between two hstore values
Следующее
От: Andreas Kretschmer
Дата:
Сообщение: Re: WITH RECURSIVE question