Fórum Varios Relacionamento com INNER JOIN em um mesmo SELECT, PostgreSQL #505651

29/12/2014

0

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

Responder

Post mais votado

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

Jair N.

Jair N.
Responder

Gostei + 1

Mais Posts

29/12/2014

Joel Rodrigues

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 ...
Responder

Gostei + 0

29/12/2014

Marisiana Battistella

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

Gostei + 0

29/12/2014

Jefferson Pigossi

é 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?
Responder

Gostei + 0

29/12/2014

Jefferson Pigossi

Por falta de sabedoria mesmo viu... agora vou por o INNER JOIN...
Responder

Gostei + 0

29/12/2014

Jefferson Pigossi

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));
Responder

Gostei + 0

29/12/2014

Marisiana Battistella

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));
Responder

Gostei + 1

29/12/2014

Jefferson Pigossi

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));
Responder

Gostei + 0

29/12/2014

Marisiana Battistella

De nada!! =)
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar