Inquiridor
Vinculação

Pergunta
-
Prezados,
Se possível, gostaria de uma ajuda para resolução de um problema.
Possuo as seguintes tabelas:
TMOV - Tabela responsável pelas transferências de estoque;
TITMMOV - Tabela responsável pelos itens contidos no movimento de transferência;
GFILIAL - Tabela com o cadastro das filiais;
TPRDLOC - Tabela repensável pelos saldos dos produtos em seus respectivos estoques;
TPRDLOCINFO - Responsável pelas informações de saldo máximo e saldo mínimo de cada produto, ou seja, podemos cadastrar um consumo máximo e mínimo, para que não falte produtos e também não exceda a quantidade máxima necessária;
Estou fazendo um relatório e anexando o mesmo na SOLICITAÇÃO DE COMPRA, sendo que quando um setor solicite a compra de itens, o responsável pela aquisição possa obter as seguintes informações:
Saldo atual do produto, quantidade requisitada, saldo máximo e saldo mínimo;
O problema é que nem todos os produtos estão com as informações cadastradas na tabela TPRDLOCINFO, desta forma, mesmo com o left join, quando o sql não acha informação na referida tabela, não retorna nenhum dado.
Preciso que mesmo sem dados na tabela TPRDLOCINFO, o sistema traga as informações o restante das tabelas: saldo atual, dados da unidade etc.
Como resolver?
Desde já agradeço!
SELECT TMOV.NUMEROMOV AS 'MOVIMENTO',
Upper(GFILIAL.NOMEFANTASIA) AS 'UNIDADE_NOME',
GFILIAL.CGC AS 'UNIDADE_CNPJ',
Upper(GFILIAL.RUA) AS 'UNIDADE_RUA',
GFILIAL.NUMERO AS 'UNIDADE_NUMERO',
Upper(GFILIAL.BAIRRO) AS 'UNIDADE_BAIRRO',
GFILIAL.ESTADO AS 'UNIDADE_ESTADO',
GFILIAL.CEP AS 'UNIDADE_CEP',
Upper(GFILIAL.CIDADE) AS 'UNIDADE_CIDADE',
GFILIAL.TELEFONE AS 'UNIDADE_FONE',
TPRD.CODIGOPRD AS 'PRODUTO_CODIGO',
TPRD.NOMEFANTASIA AS 'PRODUTO_NOME',
TUND.CODUND AS 'PRODUTO_UNIDADE',
TITMMOV.QUANTIDADE AS 'PRODUTO_QUANTIDADE',
TPRDLOC.SALDOFISICO2 AS 'PRODUTO_SALDO_GERAL',
TPRDLOCINFO.SALDOFISMAX AS 'PRODUTO_SALDO_MAX',
TPRDLOCINFO.SALDFISMIN AS 'PRODUTO_DALDO_MIN',
TMOV.DATACRIACAO AS 'MOVIMENTO_DATA'
FROM TITMMOV(NOLOCK)
INNER JOIN TMOV(NOLOCK)
ON TMOV.IDMOV = TITMMOV.IDMOV
INNER JOIN GFILIAL(NOLOCK)
ON GFILIAL.CODFILIAL = TMOV.CODFILIAL
INNER JOIN TPRD(NOLOCK)
ON TITMMOV.IDPRD = TPRD.IDPRD
INNER JOIN TUND(NOLOCK)
ON TITMMOV.CODUND = TUND.CODUND
INNER JOIN TPRDLOC
ON TPRD.IDPRD = TPRDLOC.IDPRD
LEFT JOIN TPRDLOCINFO(NOLOCK)
ON TPRD.IDPRD = TPRDLOCINFO.IDPRD
WHERE TMOV.IDMOV =532170
AND TMOV.CODCOLIGADA = 1
AND TPRDLOC.CODLOC = TMOV.CODLOC
AND TPRDLOCINFO.CODLOC = TMOV.CODLOC
Todas as Respostas
-
Bom dia,
Experimente deixar o final da sua consulta dessa forma:
INNER JOIN TPRDLOC ON TPRD.IDPRD = TPRDLOC.IDPRD AND TPRDLOC.CODLOC = TMOV.CODLOC LEFT JOIN TPRDLOCINFO(NOLOCK) ON TPRD.IDPRD = TPRDLOCINFO.IDPRD AND TPRDLOCINFO.CODLOC = TMOV.CODLOC WHERE TMOV.IDMOV =532170 AND TMOV.CODCOLIGADA = 1
A alteração envolvendo a junção com a tabela TPRDLOC não tinha relação com a questão, mas fiz a alteração para manter o princípio de deixar as condições para as junções no On em vez de deixar no Where.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 11 de maio de 2020 17:10
-
Bom dia,
Experimente deixar o final da sua consulta dessa forma:
INNER JOIN TPRDLOC ON TPRD.IDPRD = TPRDLOC.IDPRD AND TPRDLOC.CODLOC = TMOV.CODLOC LEFT JOIN TPRDLOCINFO(NOLOCK) ON TPRD.IDPRD = TPRDLOCINFO.IDPRD AND TPRDLOCINFO.CODLOC = TMOV.CODLOC WHERE TMOV.IDMOV =532170 AND TMOV.CODCOLIGADA = 1
A alteração envolvendo a junção com a tabela TPRDLOC não tinha relação com a questão, mas fiz a alteração para manter o princípio de deixar as condições para as junções no On em vez de deixar no Where.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
Gapimex,
Sim, este procedimento acaba sendo uma análise interessante, pois assim já estará limitando os resultados que serão aplicados a condição da Junção, ao invês de deixar trazer todos os dados e depois filtrar!
Em vários casos este tipo de filtragem ajuda em muito nas questões de performance o que acaba melhorando o uso e adoção do paralelismo durante o processamento da query.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]