quinta-feira, 21 de março de 2013

Consulta Recursiva

Tenho uma tabelas órgãos que necessito apresentar uma hierarquia.

select * from orgaos


codigo codigo_pai sigla
3 2 SAGI
1 null PR
4 3 DGI
5 3 DFD
6 3 DM
7 3 DA
2 1 MDS
12 1 MTE
13 1 MRE
11 3 Gab/SAGI

Para representar este organograma


A consulta abaixo:

with recursive org (codigo, codigo_pai, sigla, deep) as (
  select codigo, codigo_pai, sigla,1
    from orgaos
    where codigo_pai is null
  union all
    select o1.codigo, o1.codigo_pai, o1.sigla,o2.deep+1
    from orgaos o1, org o2
    where o2.codigo = o1.codigo_pai
 
 )
 select * from org

me gerou


orgao orgao_pai sigla path deep
1 PR {1} 1
2 1 MDS {1,2} 2
3 2 SAGI {1,2,3} 3
4 3 DGI {1,2,3,4} 4
5 3 DFD {1,2,3,5} 4
6 3 DM {1,2,3,6} 4
7 3 DA {1,2,3,7} 4
11 3 Gab/SAGI {1,2,3,11} 4
12 1 MTE {1,12} 2
13 1 MRE {1,13} 2

Nenhum comentário: