Me desculpem, mas acho que eu mesmo acabei trocando as coisas, então vamos 
tentar novamente.

Na tabela foo1 pretendo armazenar informações para as quais haverão registros 
descendentes (tabela foo2) e esta última, por sua vez, também terá seus 
descendentes armazenados na tabela foo3, completando uma hierarquia cujo número 
de subníveis é exatamente dois. Logo, refazendo o resultado desejado que enviei 
no primeiro email, teríamos o seguinte aspecto:

PRODUTO1   COR         AMARELA 
        AZUL 
        CINZA 
        MARROM 
        PRETA 
   MODELO 
        JEANS 
PRODUTO 2PRODUTO 3PRODUTO 4
   COR
        BRANCA 
        VERDE 
   TAMANHO 
        MEDIO Notem que o usuário pode querer atribuir outras características 
para cada produto e estas, consequentemente, podem agrupar diversos valores que 
lhe façam referência.Sei que falei que outrora que poderíamos omitir os códigos 
do resultados, não que seja exatamente isto que eu quero, pelo contrário, mas o 
fiz em função de tentar simplificar a resolução desta solicitação (se é que é 
possível).Quanto ao connect by() [1], é uma extensão para Oracle que funciona 
juntamente com start with na implementação de querys recursivas. Também 
encontrei alguns comentários[2] sobre uma possível implementação de algo 
parecido no PostgreSQL, não sei se procede. Por último ví em uma mensagem 
antiga [3] do forum de PostgreSQL que haveria um path para adicionar essa 
função ao elefante, no entanto, o link indicado é de um site russo e lá nada 
encontrei.[1] http://www.adp-gmbh.ch/ora/sql/connect_by.html[2] 
http://osdir.com/ml/db.postgresql.brasil/2002-12/msg00378.html[3] 
http://archives.postgresql.org/pgsql-bugs/2004-05/msg00047.php

Mais uma vez grato pelo empenho em esclareçer esta demanda,Atenciosamente,
ADENILTON Batista da Silva 
         Index Informática LTDA  

-----------------------------
   (79)3431-3234 / 9142-0886 
 [EMAIL PROTECTED]

 www.indexinformatica.com.br





> Date: Sat, 6 Sep 2008 13:45:02 -0300
> From: [EMAIL PROTECTED]
> To: [email protected]
> Subject: Re: [pgbr-geral] Consulta Recursiva.
> 
> Em 06/09/08, Adenilton B. da Silva<[EMAIL PROTECTED]> escreveu:
> > Bom dia,
> >
> > Em primeiro lugar peço desculpas pelo longo email que abaixo segue.
> >
> > Dei uma pesquisada no nabble e também no google e não achei muita coisa a
> > respeito, preciso implementar uma consulta recursiva em PostgreSQL e venho a
> > recorrer aos gurus desta lista.
> >
> > Estou utilizando o PostgreSQL versão 8.3.3 no Windows XP SP3.
> >
> > Tenho as seguintes tabelas como exemplo:
> >
> > CREATE TABLE foo1(  codigo serial NOT NULL,  descricao character
> > varying(30),  qtde integer NOT NULL,  preco numeric(13,3),  CONSTRAINT
> > foo1_pkey PRIMARY KEY (codigo))
> >
> > CREATE TABLE foo2(  codigo serial NOT NULL,  caracteristica character
> > varying(20),  CONSTRAINT foo2_pkey PRIMARY KEY (codigo))
> >
> > CREATE TABLE foo3(  codigo serial NOT NULL,  codfoo2 integer,  desccaract
> > character varying(30),  codfoo1 integer,  qtde integer,  preco
> > numeric(13,3),  CONSTRAINT foo3_pkey PRIMARY KEY (codigo))
> >
> > Populei elas da seguinte forma:
> >
> > INSERT INTO FOO1 (DESCRICAO, QTDE, PRECO) VALUES ('PRODUTO 1', 11, 25);
> > INSERT INTO FOO1 (DESCRICAO, QTDE, PRECO) VALUES ('PRODUTO 2', 22, 30);
> > INSERT INTO FOO1 (DESCRICAO, QTDE, PRECO) VALUES ('PRODUTO 3', 33, 19);
> > INSERT INTO FOO1 (DESCRICAO, QTDE, PRECO) VALUES ('PRODUTO 4', 44, 25);
> >
> > INSERT INTO FOO2 (CARACTERISTICA) VALUES ('COR');
> > INSERT INTO FOO2 (CARACTERISTICA) VALUES ('TAMANHO');
> > INSERT INTO FOO2 (CARACTERISTICA) VALUES ('MODELO');
> >
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'AZUL', 1, 3, 35);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'PRETA', 1, 5, 23);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'MARROM', 1, 8, 28);INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE,
> > PRECO) VALUES (1, 'CINZA', 1, 6, 54);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'BRANCA', 4, 2, 21);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'VERDE', 4, 8, 45);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (2,
> > 'MEDIO', 4, 9, 29);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (1,
> > 'AMARELA', 1, 5, 15);
> > INSERT INTO FOO3 (CODFOO2, DESCCARACT, CODFOO1, QTDE, PRECO) VALUES (3,
> > 'JEANS', 1, 3, 12);
> >
> > Numa tentativa de agrupar os resultados criei a seguinte view:
> >
> > CREATE OR REPLACE VIEW vfoo AS  SELECT f.codigo, f.descricao,
> > h.caracteristica, g.desccaract, f.preco AS precofo01, f.qtde AS qtdefoo1,
> > g.qtde AS qtdefoo3, g.preco AS precofo03   FROM foo1 f   LEFT JOIN foo3 g ON
> > f.codigo = g.codfoo1   LEFT JOIN foo2 h ON h.codigo = g.codfoo2;
> >
> > Que agrupou uma parte dos dados, e em seguida para trazer as quantidades e
> > os preços de cada item que não possuem hierarquia fiz essa outra view:
> >
> > CREATE OR REPLACE VIEW vfoo1 AS  SELECT vfoo.codigo, vfoo.descricao,
> > vfoo.caracteristica, vfoo.desccaract, vfoo.qtdefoo3, vfoo.precofo03 AS preco
> >   FROM vfoo  WHERE vfoo.caracteristica::text <> ''::textUNION  SELECT
> > vfoo.codigo, vfoo.descricao, vfoo.caracteristica, vfoo.desccaract,
> > vfoo.qtdefoo1 AS qtdefoo3, vfoo.precofo01 AS preco   FROM vfoo  WHERE
> > vfoo.caracteristica IS NULL  ORDER BY 2;
> > Esta por sua vez traz todos os dados que quero, mas não da forma como desejo
> > visualizar, vejamos o retorno dessa view e a forma como desejo os
> > resultados:
> >
> > Retorno da view:
> >
> > CODIGO  DESCRICAO     CARACTERISTICA  DESCCART     QTDEFOO3 PRECO
> > 1             "PRODUTO 1"   "COR"                   "AMARELA"       5
> >      15.000
> > 1             "PRODUTO 1"   "COR"                   "AZUL"               3
> >           35.000
> > 1             "PRODUTO 1"   "COR"                   "CINZA"             6
> >          54.000
> > 1             "PRODUTO 1"   "COR"                   "MARROM"       8
> >     28.000
> > 1             "PRODUTO 1"   "COR"                   "PRETA"             5
> >          23.000
> > 1             "PRODUTO 1"   "MODELO"         "JEANS"                3
> >      12.000
> > 2             "PRODUTO 2"   ""                           ""
> >      22           30.000
> > 3             "PRODUTO 3"   ""                           ""
> >      33           19.000
> > 4             "PRODUTO 4"   "COR"                   "BRANCA"          2
> >        21.000
> > 4             "PRODUTO 4"   "COR"                   "VERDE"             8
> >          45.000
> > 4             "PRODUTO 4"   "TAMANHO"     "MEDIO"                9
> >   29.000
> >
> >
> > Retorno desejado:
> >
> > ALGO PARECIDO COM:
> >
> > Podemos descartar os codigos e montar a estutura da seguinte forma:
> >
> > PRODUTO1
> >    COR AMARELA 5 15.000  -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    COR AZUL 5 35.000  -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA COLUNA.
> >    COR CINZA 6 54.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    COR MARROM 8 28.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    COR PRETA 5 23.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    MODELO JEANS  3 12.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> > PRODUTO 2
> > PRODUTO 3
> > PRODUTO 4
> >    COR BRANCA 2 21.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    COR VERDE 8 45.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >    TAMANHO MEDIO 9 29.000   -- NOTEM QUE ESTE RESULTADO PODE SER UMA UNICA
> > COLUNA.
> >
> >
> >
> > Se precisarem de alguma outra informação para complemento destas
> > informações, não hesitem em pedir.
> >
> 
> 
> Você poderia indicar onde deseja a recursividade pois não consegui 
> identificar.
> Me parece uma simples questão de junção e não de recursividade.
> 
> Osvaldo
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

_________________________________________________________________
Cansado de espaço para só 50 fotos? Conheça o Spaces, o site de relacionamentos 
com até 6,000 fotos!
http://www.amigosdomessenger.com.br
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a