INNER JOIN de 4 tabelas
Tenho 4 tabelas contratos, empresa, objeto e debito, quero realizar uma consulta para exbir: contratos,empresa(nome),valor_o(orçado) e valor_r(realizado/pago), na primeira query retorna tudo correto:
SELECT c.contrato,e.empresa,sum(o.valor) as valor_o FROM objeto o INNER JOIN contratos c ON (c.contrato = o.contrato) INNER JOIN empresa e ON (c.empresa = e.id_empresa) group by c.contrato (valor_o correto)
Já na segunda quando incluo a tabela debito d ele retorna contrato, empresa corretos, mas valor_o e valor_r dobrado ou diferente.
SELECT c.contrato,e.empresa,sum(o.valor) as valor_o,sum(d.valor) as valor_r FROM objeto o INNER JOIN contratos c ON (c.contrato = o.contrato) INNER JOIN empresa e ON (c.empresa = e.id_empresa) INNER JOIN debito d ON (o.contrato = d.contrato) group by d.contrato
Gostaria de saber qual o erro e solução.
SELECT c.contrato,e.empresa,sum(o.valor) as valor_o FROM objeto o INNER JOIN contratos c ON (c.contrato = o.contrato) INNER JOIN empresa e ON (c.empresa = e.id_empresa) group by c.contrato (valor_o correto)
Já na segunda quando incluo a tabela debito d ele retorna contrato, empresa corretos, mas valor_o e valor_r dobrado ou diferente.
SELECT c.contrato,e.empresa,sum(o.valor) as valor_o,sum(d.valor) as valor_r FROM objeto o INNER JOIN contratos c ON (c.contrato = o.contrato) INNER JOIN empresa e ON (c.empresa = e.id_empresa) INNER JOIN debito d ON (o.contrato = d.contrato) group by d.contrato
Gostaria de saber qual o erro e solução.
Claudio Galvao
Curtidas 0
Respostas
William
18/08/2013
Colega Claudio, dizem os DBAs mais experientes (não é o meu caso ..rsrsr) que devemos usar no máximo 5 de tabelas no mesmo JOIN, isso em questão de performance e complexidade nas comparações que são executadas todas vez que usamos JOINs. No seu caso são 4 tabelas apenas, mas entre as comparações está ocorrendo duplicidade de registros em algum ponto.
Meu conselho sem conhecer a estrutura do seu banco é, tente trabalhar com LEFT ou RIGHT JOIN ou use um subselect nessa instrução.
Meu conselho sem conhecer a estrutura do seu banco é, tente trabalhar com LEFT ou RIGHT JOIN ou use um subselect nessa instrução.
GOSTEI 0
Claudio Galvao
18/08/2013
<b>Solução:</b>
SELECT c.contrato,e.empresa,o.objeto, sum(o.valor) as valor_o,(select sum(valor) from debito where contrato = c.contrato) as valor_r FROM contratos c join empresa e on(c.empresa = e.id_empresa) join objeto o on(c.contrato = o.contrato) group by c.contrato
SELECT c.contrato,e.empresa,o.objeto, sum(o.valor) as valor_o,(select sum(valor) from debito where contrato = c.contrato) as valor_r FROM contratos c join empresa e on(c.empresa = e.id_empresa) join objeto o on(c.contrato = o.contrato) group by c.contrato
GOSTEI 0
William
18/08/2013
Dúvida solucionada, estou encerrando o post!
GOSTEI 0