Varios Relacionamento com INNER JOIN em um mesmo SELECT, PostgreSQL
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!
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
Curtidas 0
Melhor post
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
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
29/12/2014
Opa, como você está tentando?
Você pode usar vários joins sem muito mistério:
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
29/12/2014
Olá Jefferson!
Porque vc está utilizando o LEFT JOIN?
O ideal não seria utilizar o INNER JOIN?
Porque vc está utilizando o LEFT JOIN?
O ideal não seria utilizar o INNER JOIN?
GOSTEI 0
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?
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
29/12/2014
Por falta de sabedoria mesmo viu... agora vou por o INNER JOIN...
GOSTEI 0
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));
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
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:
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
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));
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
29/12/2014
De nada!! =)
GOSTEI 1