Em 15/12/10, Rodrigo Santana<[email protected]> escreveu:
>
> 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
>


Creio qu é só usar a clásula ORDER BY adequada:

 WITH RECURSIVE p1(pessoa, pai) AS (
 SELECT pessoa, pai FROM pessoas WHERE pai is null
 UNION ALL
 SELECT p.pessoa, p.pai FROM pessoas p, p1 WHERE p.pai = p1.pessoa )
 SELECT * FROM p1 ORDER BY coalesce(pai,pessoa), pai NULLS FIRST, pessoa;

  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
(8 linhas)

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a