[firebase-br] SQL LEFT JOIN

Paulo Geloramo assisinformatica em gmail.com
Qua Jun 6 18:05:29 -03 2018


Veja estes SQL abaixo sem LEFT JOIN remessa esta correta
19016, mas na proxima SQL que adiciono o LEFT JOIN
remessa retorna errado 21565. Seria o mesmo SQL apenas
comentei as linhas do LEFT JOIN e retirando a venda.
Alguma sugestão?

===
SELECT T.CODIGO_PONTO, T.NOME_PONTO, P.CODIGO_PRODUTO, P.NOME_PRODUTO,
COALESCE(SUM(I.QUANTIDADE), 0) AS REMESSA
--COALESCE(SUM(C.VENDA), 0) AS VENDA
FROM NOTA_PONTO_ITEM I
JOIN PONTO T ON T.ID_PONTO = I.ID_PONTO
JOIN EDICAO E ON E.ID_EDICAO = I.ID_EDICAO
JOIN PRODUTO P ON P.ID_PRODUTO = E.ID_PRODUTO
JOIN ASSUNTO A ON A.ID_ASSUNTO = P.ID_ASSUNTO
--LEFT JOIN CE_PONTO_ITEM C ON C.ID_PONTO = I.ID_PONTO AND C.ID_EDICAO =
I.ID_EDICAO

WHERE A.CODIGO_ASSUNTO = 10
AND T.CODIGO_PONTO = 1000

GROUP BY T.CODIGO_PONTO, T.NOME_PONTO, P.CODIGO_PRODUTO, P.NOME_PRODUTO
ORDER BY T.CODIGO_PONTO, P.NOME_PRODUTO

REMESSA=19016
===
SELECT T.CODIGO_PONTO, T.NOME_PONTO, P.CODIGO_PRODUTO, P.NOME_PRODUTO,
COALESCE(SUM(I.QUANTIDADE), 0) AS REMESSA,
COALESCE(SUM(C.VENDA), 0) AS VENDA
FROM NOTA_PONTO_ITEM I
JOIN PONTO T ON T.ID_PONTO = I.ID_PONTO
JOIN EDICAO E ON E.ID_EDICAO = I.ID_EDICAO
JOIN PRODUTO P ON P.ID_PRODUTO = E.ID_PRODUTO
JOIN ASSUNTO A ON A.ID_ASSUNTO = P.ID_ASSUNTO
LEFT JOIN CE_PONTO_ITEM C ON C.ID_PONTO = I.ID_PONTO AND C.ID_EDICAO =
I.ID_EDICAO

WHERE A.CODIGO_ASSUNTO = 10
AND T.CODIGO_PONTO = 1000

GROUP BY T.CODIGO_PONTO, T.NOME_PONTO, P.CODIGO_PRODUTO, P.NOME_PRODUTO
ORDER BY T.CODIGO_PONTO, P.NOME_PRODUTO

REMESSA = 21565
=========

Paulo Geloramo
www.assisinformatica.com


Em qua, 6 de jun de 2018 às 11:37, Gabriel Bonzanini <
gabriel.bonzanini em gmail.com> escreveu:

> Revise os joins utilizados, verificando se está sendo feita a ligação
> utilizando todas as primary keys das tabelas referenciadas.
>
> Em 5 de junho de 2018 22:19, Renan Rogowski Pozzo <renanrpozzo em gmail.com>
> escreveu:
>
> > O SUM vai somar todos os registros que retonarem na consulta. Se algum
> dos
> > joins a relação retornar mais de um registro vai somar duas, ou mais,
> > vezes.
> >
> > Tente fazer o select retornando todos os registros para ver se esse é o
> > problema.
> >
> > Em ter, 5 de jun de 2018 às 21:18, Paulo Geloramo <
> > assisinformatica em gmail.com> escreveu:
> >
> > > SELECT
> > > COALESCE(SUM(I.QUANTIDADE), 0) AS REMESSA,
> > > COALESCE(SUM(C.VENDA), 0) AS VENDA,
> > > COALESCE(SUM(Q.QUANTIDADE), 0) AS ESTOQUE
> > > FROM NOTA_PONTO_ITEM I
> > > JOIN PONTO T ON T.ID_PONTO = I.ID_PONTO
> > > JOIN EDICAO E ON E.ID_EDICAO = I.ID_EDICAO
> > > JOIN PRODUTO P ON P.ID_PRODUTO = E.ID_PRODUTO
> > > JOIN ASSUNTO A ON A.ID_ASSUNTO = P.ID_ASSUNTO
> > > LEFT JOIN CE_PONTO_ITEM C ON (C.ID_PONTO = T.ID_PONTO AND C.ID_EDICAO =
> > > E.ID_EDICAO)
> > > LEFT JOIN ESTOQUE Q ON (Q.ID_PONTO = T.ID_PONTO AND Q.ID_EDICAO =
> > > E.ID_EDICAO)
> > > WHERE T.CODIGO_PONTO = 1000
> > > AND A.CODIGO_ASSUNTO = 10
> > >
> > > Firebird 2.5.8
> > > Quando faço três consultas separadas
> > > retorna o total correto.
> > >
> > > Com dois LEFT JOIN retorna
> > > o total da REMESSA errado.
> > >
> > > Alguma sugestão para retornar
> > > REMESSA, VENDA e ESTOQUE na mesma
> > > consulta?
> > >
> > > --
> > > Paulo Esteves
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > > http://www.firebase.com.br/fb/artigo.php?id=1107
> > > Para consultar mensagens antigas:
> > > http://www.firebase.com.br/pesquisa_lista.html
> > >
> > --
> > Abraço,
> > Renan Rogowski Pozzo
> >
> > *"E a paz de Deus, que excede todo o entendimento, guardará os vossos
> > corações e os vossos pensamentos em Cristo Jesus." Filipenses 4.7*
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> > http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://www.firebase.com.br/
> > pesquisa_lista.html
> >
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista