Leonardo Ribeiro escreveu:
> Pois é..
> 
> As tabelas não tem relação umas com as outras...
> Eu faço esse select para não precisar ficar fazendo um select
> separado por vez e assim para cada select realizar uma requisição
> remota. (trabalho com sistema com acesso remoto)
> 
> Precisa mesmo era pegar todos os registros das tabelas do select mas
> elas não tem relação umas com as outras....
> 
> alguma idéia?
> 
> 
> On 10/5/06, * Thiago Risso* <[EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>> wrote:
> 
>     Utilize o LEFT JOIN ...
>     Mas para isso deve haver alguma relação entre as tabelas...
>     Supondo que na table tp_pessoa exista : id_status, id_entidade,
>     id_registro_classe.
> 
>     Ficaria assim :
> 
>     SELECT p.cd_pessoa , tp.descricao,  st.cd_status, st.descricao,
>     te.cd_tp_entidade, te.descricao, trc.cd_tp_registro_classe FROM
>     tp_pessoa
>     LEFT JOIN status S ON S.id_status = tp.id_status
>     LEFT JOIN tp_entidade te ON te.id_entidade = tp.id_entidade
>     LEFT JOIN tp_registro_classe trc ON trc.id_registro_classe =
>     tp.id_registro_classe;
> 
>     Dessa FORMA a uma obrigatoriedade é existir o registro na tabela
>     tp_pessoa.
>     caso não exista em qualquer das outras tabelas os campos referentes a
>     ela veem NULL;
> 
>     Att:
> 
>     Thiago Risso
> 
> 
>     On 10/5/06, Leonardo Ribeiro <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>> wrote:
>      > Senhores,
>      >
>      > supondo a seguinte consulta:
>      >
>      > select tp.cd_pessoa, tp.descricao,
>      > st.cd_status, st.descricao,
>      > te.cd_tp_entidade, te.descricao,
>      > trc.cd_tp_registro_classe
>      > from tp_pessoa tp, status st, tp_entidade te, tp_registro_classe
>     trc;
>      >
>      > Se por acaso alguma das tabelas estiver vazia, sem nenhum
>     registro, esse
>      > select
>      > não retorna nada..
>      > Há um meio de retornar pelo menos os dados das tabelas que
>     possuem registro?


Em primeiro lugar aconselho que você reveja urgentemente sua aplicação, 
pois se as tabelas "não tem relação umas com as outras" como você afirma 
então você está fazendo um cross-join (isto é cada linha de uma tabela é 
combinada com todas as linhas das demais tabelas) o que implica num 
volume de dados repetidos sendo transmitidos extremamente alto (a não 
ser cada tabela possua no máximo uma linha...).

bdteste=# SELECT * FROM ta;
  id | descr
----+-------
   1 | a
   2 | b
   3 | c
(3 registros)

bdteste=# SELECT * FROM tb;
  id | descr
----+-------
  55 | X
  66 | Y
(2 registros)

bdteste=# SELECT * FROM ta, tb;
  id | descr | id | descr
----+-------+----+-------
   1 | a     | 55 | X
   1 | a     | 66 | Y
   2 | b     | 55 | X
   2 | b     | 66 | Y
   3 | c     | 55 | X
   3 | c     | 66 | Y
(6 registros)

Como alternativa, se os campos de suas tabelas forem união-compatíveis, 
você pode utilizar algo como:

SELECT 'Pessoa', cd_pessoa, descricao FROM tp_pessoa
UNION ALL
SELECT 'Status', cd_status, descricao FROM status
UNION ALL
SELECT 'Entidade', cd_tp_entidade, descricao FROM tp_entidade
UNION ALL
SELECT 'Classe', NULL, cd_tp_registro_classe FROM tp_registro_classe;

Veja:
http://www.postgresql.org/docs/8.1/interactive/queries-union.html

bdteste=# SELECT 'ta',* FROM ta UNION ALL SELECT 'tb',* FROM tb;
  ?column? | id | descr
----------+----+-------
  ta       |  1 | a
  ta       |  2 | b
  ta       |  3 | c
  tb       | 55 | X
  tb       | 66 | Y
(5 registros)

[]s
Osvaldo

        

        
                
_______________________________________________________ 
Você quer respostas para suas perguntas? Ou você sabe muito e quer compartilhar 
seu conhecimento? Experimente o Yahoo! Respostas !
http://br.answers.yahoo.com/
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a