Varios Relacionamento com INNER JOIN em um mesmo SELECT, PostgreSQL

PostgreSQL

29/12/2014

Preciso fazer uma consulta pra me retornar relacionamentos mais na minha tabela por exemplo existe cod_tipo_contato1, cod_tipo_contato2.... então quando tenho somente um relacionamento faço assim:

SELECT base.cliente.*, base.tipo_contato.tipo
FROM base.cliente
LEFT JOIN base.tipo_contato ON (base.tipo_contato.cod = base.cliente.cod_cont_t1)
Assim ele me retorna normal, um campo chamado tipo1..mais não consigo consultar com mais relacionamento no mesmo SELECT!!! se alguém me ajudar agradeço muitooo!
Jefferson Pigossi

Jefferson Pigossi

Curtidas 0

Melhor post

Jair N.

Jair N.

29/12/2014

Boa Tarde seria no caso para a entidade de seus "contatos" criar para cada um "apelido" a cada tipo de contato?
Conforme citado em sua pergunta "...cod_tipo_contato1, cod_tipo_contato2..."
Não coerente:
SELECT base.cliente.*, base.tipo_contato.tipo
FROM base.cliente
LEFT JOIN base.tipo_contato
ON (base.tipo_contato.cod = base.cliente.cod_cont_t1)

veja deste modo:
SELECT cli.*
, tc1.*
, tc2.*
FROM base.cliente cli
LEFT JOIN base.tipo_contato tc1
ON (tc1.cod = cli.cod_cont_t1)
LEFT JOIN base.tipo_contato tc2
ON (tc2.cod = cli.cod_cont_t2)
...

OBS: O relacionamento é do tipo "LEFT JOIN" pois pode ele não existir no relacionamento entre as entidades.

Atc
GOSTEI 1

Mais Respostas

Joel Rodrigues

Joel Rodrigues

29/12/2014

Opa, como você está tentando?
Você pode usar vários joins sem muito mistério:
SELECT ...
FROM Tabela1
INNER JOIN Tabela2 ON ...
INNER JOIN Tabela3 ON ...
LEFT JOIN Tabela4 ON ...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/12/2014

Olá Jefferson!
Porque vc está utilizando o LEFT JOIN?
O ideal não seria utilizar o INNER JOIN?
GOSTEI 0
Jefferson Pigossi

Jefferson Pigossi

29/12/2014

é que na verdade não são de tabelas diferentes é da mesmo, por exemplo na minha tabela cliente existe 5 colunas com relacionamento pra mesma tabela,
base.cliente.cod_cont_t1
base.cliente.cod_cont_t2
base.cliente.cod_cont_t3
base.cliente.cod_cont_t4
base.cliente.cod_cont_t5

queria pegar nome do TIPO de contato desses campos entendeu?
GOSTEI 0
Jefferson Pigossi

Jefferson Pigossi

29/12/2014

Por falta de sabedoria mesmo viu... agora vou por o INNER JOIN...
GOSTEI 0
Jefferson Pigossi

Jefferson Pigossi

29/12/2014

Jair deu certo, Muito Obrigado Pela Ajuda,só tenho mais um pequena duvida, será que tem como mudar o nome do retorno, por exemplo nesse select o resultado retorna os resultados dos relacionamento na colunca tipo1, e tipo2, pq já existe na tabela cliente o campo tipo, será que tem como alterar o nome?
Codigo ficou assim agora:

SELECT base.cliente.*, tc1.tipo, tc2.tipo
FROM base.cliente"
LEFT JOIN base.tipo_contato tc1 ON (tc1.cod = base.cliente.cod_cont_t1)
LEFT JOIN base.tipo_contato tc2 ON (tc2.cod = base.cliente.cod_cont_t2)
WHERE base.cliente.cod = ", cod));
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/12/2014

Eu não tinha entendido como era a estrutura da tabela Jefferson....

Vc pode definir o nome do retorno de cada coluna, mas para isso não pode utilizar o " select base.cliente.* ", informe os nomes das colunas que contém os dados que vc precisa obter no retorno e defina um nome para a coluna.
Por exemplo:

SELECT base.cliente.*,
          tc1.tipo as tipo_1,
          tc2.tipo as tipo_2
FROM base.cliente
LEFT JOIN base.tipo_contato tc1 ON (tc1.cod = base.cliente.cod_cont_t1)
LEFT JOIN base.tipo_contato tc2 ON (tc2.cod = base.cliente.cod_cont_t2)
WHERE base.cliente.cod =  ", cod));
GOSTEI 1
Jefferson Pigossi

Jefferson Pigossi

29/12/2014

Deu Certo, Obrigado

Jair A.N e Marisiana

Agora o código ficou assim:

SELECT base.cliente.*,
tc1.tipo AS cont_tp1,
tc2.tipo AS cont_tp2,
tc3.tipo AS cont_tp3,
tc4.tipo AS cont_tp4,
tc5.tipo AS cont_tp5
FROM base.cliente
LEFT JOIN base.tipo_contato tc1 ON (tc1.cod = base.cliente.cod_cont_t1)
LEFT JOIN base.tipo_contato tc2 ON (tc2.cod = base.cliente.cod_cont_t2)
LEFT JOIN base.tipo_contato tc3 ON (tc3.cod = base.cliente.cod_cont_t3)
LEFT JOIN base.tipo_contato tc4 ON (tc4.cod = base.cliente.cod_cont_t4)
LEFT JOIN base.tipo_contato tc5 ON (tc5.cod = base.cliente.cod_cont_t5)
WHERE base.cliente.cod = , cod));
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

29/12/2014

De nada!! =)
GOSTEI 1
POSTAR