Bom, como segue abaixo o problema é que as linhas no Oracle retornam sempre 
classificadas ... por exemplo tenho dois "pais" na minha tabela ... ao realizar 
o select ele retorna o primeiro pai e seus fillhos e depois o segundo pai e 
seus respsctivos filhos. No postgresql, usando o with recursive como mostrei 
ele retorna diretamente os dois pais e depois só aparecem os filhos do primeiro 
pai ... Preciso que as informações se apresentem como no Oracle !

RESULTADO ORACLE:

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


RESULTADO POSTGRESQL:

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


Rodrigo-FS


> Date: Tue, 14 Dec 2010 14:12:39 -0200
> From: [email protected]
> To: [email protected]
> Subject: Re: [pgbr-geral] Consulta hierarquica no PostgreSQL
> 
> Em 14/12/10, rodfs<[email protected]> escreveu:
> >
> > 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 !!
> >
> 
> 
> Seu problema se refere apenas à classificação das linhas?
> Dados faltando?
> Alguma outra coisa?
> 
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
                                          
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a