4 Replies Latest reply: Oct 23, 2014 12:20 PM by Eduardo Ferreira RSS

    Retornar uma tabela com registros não coincidentes

      Bom dia!

       

      Estou com uma dificuldade em fazer um load de duas tabelas e retirar apenas os dados que não foram localizados.

      Em SQL, o código seria o seguinte:

      SELECT TabelaA.* FROM base_1 as Tabela1, base_TabelaB as Tabela2

      WHERE Tabela1.numero_contrato <> Tabela2.numero_contrato;

       

       

      Em prática, quero construir o seguinte resultado:

      Tabela A

      Número ContratoInformação

      Contrato1

      A
      Contrato2B
      Contrato3A
      Contrato4A
      Contrato5B
      Contrato6B
      Contrato7C

       

      Tabela B:

      Número ContratoInformação
      Contrato1A
      Contrato5B
      Contrato6B
      Contrato7C

       

      Tabela Resultado:

      Número ContratoInformação
      Contrato2B
      Contrato3A
      Contrato4A

       

      Pesquisei em outros fóruns alguma sintaxe que pudesse me ajudar e não encontrei.

      Já tentei colocar tags na hora de left join com "Encontrado" e fazer um load * resident TabelaResultado where tag<>'Encontrado', porém sem sucesso.

       

      Obrigado!

      Eduardo Magalhães

        • Re: Retornar uma tabela com registros não coincidentes
          Luciano Vasconcelos

          Bom dia.

          É simples.

          Você vai primeiro ler a tabela B.

          Depois você vai ler  tabela A com a condição Where not exists Número Contrato e drop a tabela B.

           

          Funciona da seguinte maneira: O Where not exists varre os valores de campos já carregados pelo nome do campo.

          Segue explicação do help:

           

          Funções Inter-registro

          Essas funções são usadas quando um valor dos registros de dados carregados anteriormente é necessário para a avaliação do registro atual.

          exists(campo [ , expressão ])

          Determina se um valor de campo específico existe em um campo especificado dos dados carregados até o momento. Campo é um nome ou uma expressão de caractere que é avaliada para um nome de campo. O campo deve existir nos dados carregados até o momento pelo script. Expr é uma expressão avaliada para o valor de campo a ser pesquisado no campo especificado. Se for omitido, será assumido o valor do registro atual no campo especificado.

          Exemplos:

          exists(Mês, 'Jan') retorna -1 (verdadeiro) se o valor de campo 'Jan' puder ser encontrado no conteúdo atual do campo Mês.

          exists(IDnr, IDnr) retorna -1 (verdadeiro) se o valor do campo IDnr no registro atual já existir em qualquer registro lido anteriormente naquele campo.

          exists (IDnr) é idêntico ao exemplo anterior.

          Load Funcionário, ID, Salário from Funcionários.csv;
          Load Nome& ' ' &Sobrenome as Funcionário, Comentário from Cidadãos.csv where exists (Funcionário, Nome& ' ' &Sobrenome);
          Serão lidos somente os comentários sobre os cidadãos que são funcionários.

          Load A, B, C, from Funcionários.csv where not exists (A);
          Isso equivale a executar um distinct load no campo A.

          • Re: Retornar uma tabela com registros não coincidentes
            Yuri Nicolett

            Eduardo, você pode fazer isso usando a função NOT Exists.

             

            Segue uma app de exemplo com seus dados de teste

            • Re: Retornar uma tabela com registros não coincidentes
              Clever Anjos

              Seguindo a recomendação do lucianosv

               

              TEMP1:

              LOAD * INLINE [

                  Número Contrato, Informação

                  Contrato1, A

                  Contrato5, B

                  Contrato6, B

                  Contrato7, C

              ];

               

               

              NOCONCATENATE LOAD * INLINE [

                  Número Contrato, Informação

                  Contrato1, A

                  Contrato2, B

                  Contrato3, A

                  Contrato4, A

                  Contrato5, B

                  Contrato6, B

                  Contrato7, C

              ]

              WHERE NOT Exists([Número Contrato],[Número Contrato]);

               

               

              DROP Table TEMP1;

              • Re: Retornar uma tabela com registros não coincidentes

                Muito obrigado!

                Dessa forma consegui fazer a exclusão dos contratos que preciso avaliar!