Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #107272
    Avatar de Claudio ReisClaudio Reis
    Participante

      Boa tarde galera,
      Estou com uma dúvida quando faço um select tenho 2 tabelas uma de capa X07 e uma dos itens dessa nota X08 e uma do cadastros de produtos X2013 eu qria trazer todas as notas que estao no intervalo os dados da nota que estão no intervalo ou seja sao 4 capas ..e se quiser trazer por produtos sao 10 itens e a descrição desses itens que é o unico campo da x2013 se eu não coloco o campo da X2013 ela retorna normal mas assim que eu coloco o campo no select ai ele retorna muitos valores o unico campo que amarra a X08 com a X2013 é o IDENT_PRODUTO alguém sabe o por que isso acontece? segue o codigo.

      SELECT DISTINCT X08.NUM_DOCFIS,
      X08.DATA_FISCAL,
      X2013.DESCRICAO
      --
      FROM X07_DOCTO_FISCAL X07
      ,X08_ITENS_MERC X08
      ,X2013_PRODUTO X2013
      --
      WHERE
      X08.DATA_FISCAL >= '11-DEC-14' OR X08.DATA_FISCAL < '12-DEC-14' AND X07.NUM_DOCFIS = '001760' OR X07.NUM_DOCFIS = '132941' AND X07.NUM_DOCFIS = X08.NUM_DOCFIS AND X07.DATA_FISCAL = X08.DATA_FISCAL AND X07.COD_ESTAB = X08.COD_ESTAB AND X07.COD_EMPRESA = X08.COD_EMPRESA AND X07.IDENT_FIS_JUR = X08.IDENT_FIS_JUR AND X07.MOVTO_E_S = X08.MOVTO_E_S AND X07.NORM_DEV = X08.NORM_DEV AND X07.IDENT_DOCTO = X08.IDENT_DOCTO AND X07.IDENT_FIS_JUR = X08.IDENT_FIS_JUR AND X07.SERIE_DOCFIS = X08.SERIE_DOCFIS AND X07.SUB_SERIE_DOCFIS = X08.SUB_SERIE_DOCFIS AND X08.IDENT_PRODUTO = X2013.IDENT_PRODUTO AND X08.DATA_FISCAL = X2013.VALID_PRODUTO

      #107273
      Avatar de rmanrman
      Participante

        @Claudio Reis

        Explique melhor o que você precisa trazer nesta consulta.

        Quais sãos as chaves primárias de cada tabela?

        Será que não está faltando nenhuma ligação?

        Qual a razão de utilizar DISTINCT ?

        Quais campos você quer trazer nesta consulta?

        X08.DATA_FISCAL = X2013.VALID_PRODUTO, esta condição realmente está certa?

        #107274
        Avatar de Claudio ReisClaudio Reis
        Participante

          Eu qria trazer o cod do produto que esta na x07 os itens que estão na x08 mais a descricao que esta na x2013 todas as chaves estao ligadas entre a X07 com a X08 e o unico campo que liga a X2013 é o ident_produto que só liga com a X08 se eu comento a x2013 ela retorna corretas assim que eu adiciono o campo no select ela retorna muitas linhas o motivo do distinct era para que não retornasse campos duplicados. o VALID_PRODUTO é a data de cadastro do produto mas mesmo comentando X08.DATA_FISCAL = X2013.VALID_PRODUTO ele retorna muitos.

          #107275
          Avatar de Claudio ReisClaudio Reis
          Participante

            Apenas troquei a clausula do numero das notas colocando

            AND X07.NUM_DOCFIS in ( ‘001760’,’132941′)

            #107276
            Avatar de rmanrman
            Participante

              @Claudio Reis

              Funciona da seguinte forma, você tem o relacionamento de 1 para N entre NOTA e ITEM NOTA e o relacionamento 1 para 1 entre ITEM NOTA e PRODUTO.

              Quando você faz o JOIN entre NOTA e ITEM NOTA o que acontece? Para cada ITEM NOTA vai se repetir a NOTA, afinal os itens são da mesma NOTA. Então o uso do DISTINCT não se faz adequado, logo que você quer listar todos os itens. Exemplo se 1 NOTA possui 10 itens, a sua consulta deve retornar 10 registros, correto?

              As condições do JOIN devem ser a ligação entre chave primária e chave estrangeira apenas, outras condições são filtros. Para evitar essa confusão do que é ligação e filtro eu prefiro utilizar INNER/LEFT/RIGHT JOIN, ficando os filtros apenas no WHERE.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress