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
