Considerando a tabela e os dados abaixo: create table pessoa (pessoa VARCHAR(15), pai VARCHAR(15));
insert into pessoa values ('pai 1', null);
insert into pessoa values ('pai 2', null);
insert into pessoa values ('filho 1.1', 'pai 1');
insert into pessoa values ('filho 1.2', 'pai 1');
insert into pessoa values ('filho 2.1', 'pai 2');
insert into pessoa values ('filho 1.3', 'pai 1');
insert into pessoa values ('filho 1.4', 'pai 1');
insert into pessoa values ('filho 2.2', 'pai 2');
Gostaria de fazer uma consulta trazendo a hierarquia .... por exemplo no Oracle ... faço dessa forma:
select * from pessoa p
start with pai is null
connect by prior p.pessoa = p.pai;
RESULTADO:
pessoa pai
------- -----
pai 1
filho 1.1 pai 1
filho 1.2 pai 1
filho 1.3 pai 1
filho 1.4 pai 1
pai 2
filho 2.1 pai 2
filho 2.2 pai 2
Utilizando o PostgreSQL 9.0, fiz dessa forma:
with recursive p1 (pessoa, pai) as (
select pessoa, pai from pessoa where pai is null
union all
select p.pessoa, p.pai from pessoa p, p1 where p.pai = p1.pessoa
)
select * from p1;
Porém o resultado ficou estranho ... como segue
RESULTADO:
pessoa pai
------- -----
pai 1
pai 2
filho 1.1 pai 1
filho 1.2 pai 1
filho 1.3 pai 1
filho 1.4 pai 1 Alguém poderia me ajudar ... preciso que o resultado se apresenta da mesma forma como no Oracle !! Valeu !