[RESOLVIDO] MySql Consulta

Boa tarde Galera, estou tentando fazer uma consulta no meu banco, envolvendo 3 tabelas.
Basicamente eu tenho que gerar uma tabela com os produtores onde tem as colunas de quantidade de remessa, e quantidade de devolucao… a coluna de quantidade de remessa faz a soma legal, no entanto a outra coluna, duplica o valor. Ex. se a soma era ‘150’, ela sai com ‘300’, alguém sabe pq? está ai minha query.

 select p.idProdutor, p.nome, p.nInsEst, sr.produtorId, sr.graoid, SUM(sr.quant), sd.produtorId, sd.graoid, SUM(sd.quant) from produtor p inner join remessa sr on sr.produtorId = p.idProdutor and sr.graoId = 2 inner join devolucao sd on sd.produtorId = p.idProdutor and sd.graoId = 2 group by p.idProdutor

Agradeço…

Entendi que está duplicando pois na tabela remessa tem dois registros, se caso tiver 3, é triplicado o valor da Quantidade da Tabela devolucao, mas ainda não consegui resolver.

Já tentou apontar a junção como LEFT JOIN ao invés de INNER JOIN para as tabelas Remessa e Devolução ?

tentei assim, mas não foi.

 select p.idProdutor, p.nome, p.nInsEst, sr.produtorId, sr.graoid, SUM(sr.quant), sd.produtorId, sd.graoid, SUM(sd.quant) from produtor p left join remessa sr on sr.produtorId = p.idProdutor and sr.graoId = 2 left join devolucao sd on sd.produtorId = p.idProdutor and sd.graoId = 2 group by p.idProdutor

Left join não irá, apenas, desconsiderar registros inexistentes nas tabelas à esquerda? Se esse cenário contempla mais de um registro na mesma tabela, à canhota, vai dar no mesmo, não é isso?

A consulta contempla apenas estas condições?
Pois, isso realmente irá multiplicar pelo número de vezes que a consulta passar pelos registros de uma ou da outra soma.

Bem, se entendi, as condições são essas da consulta… onde eu utilizo o graoId e o produtorId pra consultar em Ambas as Tabelas (remessa,devolucao), no entanto, assim como na tabela Remessa quero q ela faça uma soma da coluna Quantidade, quero isso seja feito na coluna Quantidade da tabela Devolucao também…
Porém, pelo q observei, primeiro ela faz a soma e depois multiplica pelo numero de linhas da Tabela Remessa.

Essa multiplicação ocorre devido ao número de vezes que estes dados são identificados nesta tabela.
Tente realizar um select isolado, sem groupby e provavelmente você terá 3 linhas (ou o número de vezes que o resultado se multiplica).

Sem Group By ele só me retorna um registro.

Mas fiz esse teste pra vc ver como está passando nas tabelas.

select p.idProdutor, p.nome, p.nInsEst, sr.produtorId, sr.graoid, SUM(sr.quant), SUM(sd.quant), sd.produtorId, sd.graoid from produtor p inner join secagemremessa sr on sr.produtorId = p.idProdutor and sr.graoId = 2 inner join secagemdevolucao sd on sd.produtorId = p.idProdutor and sd.graoId = 2 GROUP BY sd.quant, sr.quant 

O retorno é este :

Entendi.
Mas, mesmo assim, alguma das consultas está trazendo resultados duplicados.
O ideal seria desmembrar a query, verificar qual delas está retornando a duplicidade e tentar identificar qual filtro resolveria isso.

já fiz várias alterações mas sem sucesso.

a SUM(sd.quant) soma repetidamente o número de vezes de cada linha da tabela remessa. Como se fosse um FOR com repetição até o número de linhas da tabela remessa.

Já ouvi falar que deveria fazer um COUNT e depois somar, mas não sei como proceder.

Resolvido galera, ficou assim.

select p.idProdutor, srr.somarem, sdd.somadev from produtor p

inner join (select sr.produtorId, SUM(sr.quant) as somarem from remessa sr group by sr.produtorId) srr on p.idProdutor = srr.produtorId

inner join (select sd.produtorId, SUM(sd.quant) as somadev from devolucao sd group by sd.produtorId) sdd on p.idProdutor = sdd.produtorId

Obrigado pela atenção