Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 Contrato | Informação |
---|---|
Contrato1 | A |
Contrato2 | B |
Contrato3 | A |
Contrato4 | A |
Contrato5 | B |
Contrato6 | B |
Contrato7 | C |
Tabela B:
Número Contrato | Informação |
---|---|
Contrato1 | A |
Contrato5 | B |
Contrato6 | B |
Contrato7 | C |
Tabela Resultado:
Número Contrato | Informação |
---|---|
Contrato2 | B |
Contrato3 | A |
Contrato4 | A |
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
Seguindo a recomendação do Luciano Vasconcelos
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;
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:
Essas funções são usadas quando um valor dos registros de dados carregados anteriormente é necessário para a avaliação do registro atual.
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.
Eduardo, você pode fazer isso usando a função NOT Exists.
Segue uma app de exemplo com seus dados de teste
Seguindo a recomendação do Luciano Vasconcelos
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;
Muito obrigado!
Dessa forma consegui fazer a exclusão dos contratos que preciso avaliar!