none
Vinculação RRS feed

  • 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 

    segunda-feira, 11 de maio de 2020 13:28

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

    segunda-feira, 11 de maio de 2020 13:58
  • 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]

    segunda-feira, 11 de maio de 2020 17:12