Como fazer para localizar e tratar dados duplicados dentro de uma tabela interna? Algo importante e essencial. O comando
Esse comando é uma das três variações do comando
O que é um
Esse comando é uma das três variações do comando
Para que funcione de forma correta precisa ser usado sempre em parceria com o comando
Como funciona o
Para usar o comando
Um exemplo da forma sem especificar parâmetros adicionais ficaria assim:
No exemplo acima os dados da tabela T_DADOS serão comparados apenas pelas colunas do tipo alfanumérico. Se a tabela T_DADOS for declarada com alguma chave, a comparação será feita pelos campos da chave. Registros considerados iguais na comparação serão excluídos, deixando apenas o primeiro encontrado.
Usando com o comando
Deve-se usar sempre o comando
Imagine que internamente o sistema faz um
Perceba que, com esta lógica, se os registros não estiverem ordenados com o mesmo critério de comparação, o sistema não encontrará as repetições e não removerá os registros repetidos
Informe o parâmetro
Vamos usar como um simples exemplo a tabela abaixo:
Podemos perceber que a loja
No exemplo acima os dados da tabela
Usando o comando
No exemplo acima, o primeiro comando irá ordenar a tabela
No comando
Agora repare que os registros da loja
Por fim, repare que o registro repetido da loja
Existe ainda uma forma de fazer a comparação de repetições por todas as colunas da tabela. Basta acrescentar o parâmetro
No exemplo acima os dados da tabela T_LOJAS serão comparados por todas as colunas. Registros considerados iguais pela coluna
Espero que seja útil.
Se alguém quiser compartilhar alguma experiência usando o
Um grande abraço e até a próxima.
DELETE ADJACENT DUPLICATES
tem a finalidade de comparar os dados de uma tabela interna para encontrar duplicidades e removê-las.Esse comando é uma das três variações do comando
DELETE
em tabelas internas. Confira mais uma postagem da série COMANDOS.O que é um DELETE ADJACENT DUPLICATES
?
Esse comando é uma das três variações do comando
DELETE
e é usado especificamente para tratar repetições de dados em tabelas internas. É possível informar por quais colunas deverá ser feita a verificação das repetições. Ele compara os dados na tabela interna e, se houver registros considerados iguais, descarta os repetidos deixando apenas o primeiro registro.Para que funcione de forma correta precisa ser usado sempre em parceria com o comando
SORT
.Como funciona o DELETE ADJACENT DUPLICATES
?
Para usar o comando
DELETE ADJACENT DUPLICATES
basta informar a tabela após o comando. Se nenhum parâmetro adicional for informado, a comparação dos dados será realizada através de campos declarados com tipos alfanuméricos. A não ser que a tabela tenha sido declarada com alguma chave, neste caso a comparação dos dados será realizada através dos campos que compõe a chave.Um exemplo da forma sem especificar parâmetros adicionais ficaria assim:
DELETE ADJACENT DUPLICATES t_dados.
No exemplo acima os dados da tabela T_DADOS serão comparados apenas pelas colunas do tipo alfanumérico. Se a tabela T_DADOS for declarada com alguma chave, a comparação será feita pelos campos da chave. Registros considerados iguais na comparação serão excluídos, deixando apenas o primeiro encontrado.
Usando com o comando SORT
Deve-se usar sempre o comando
SORT
antes do comando DELETE ADJACENT DUPLICATES
para garantir a ordenação dos registros. Preferencialmente use os mesmos campos para ordenação e para a comparação. Isso porquê, de uma forma bem prática, o comando percorre todos os registros, mas ele compara apenas o registro atual com o próximo registro.Imagine que internamente o sistema faz um
LOOP
na tabela interna percorrendo todos os registros. Quando o sistema está no registro 1, ele compara com o registros 2. Se os registros 1 e 2 forem considerados iguais segundo o critério de comparação, o registro 2 será removido da tabela fazendo com que todos os registros abaixo dele sejam automaticamente deslocados para cima. Então o sistema faz uma nova comparação ainda com o registro 1, e com o novo registro 2 (que antes era o 3, mas que foi deslocado para cima quando o antigo registro 2 foi removido). Sendo iguais, novamente o registro 2 será removido e os demais deslocados para cima. Continuando, o sistema compara o registro 1 e o novo registro 2. Se os registros não forem iguais, o sistema segue para o registro 2. Agora apontando para o registro 2, ele compara com o registro 3. Se forem iguais, remove o 3. Se não forem iguais, aponta para o 3. E assim vai sequencialmente até o penúltimo registro.Perceba que, com esta lógica, se os registros não estiverem ordenados com o mesmo critério de comparação, o sistema não encontrará as repetições e não removerá os registros repetidos
Especificando colunas para comparação
Informe o parâmetro
COMPARING
depois da tabela e em seguida as colunas separadas por espaço. Com isso as colunas estarão especificadas para a comparação.Vamos usar como um simples exemplo a tabela abaixo:
Podemos perceber que a loja
A002
aparece duas vezes na tabela, porem os dois registros não estão imediatamente abaixo um do outro. Desta forma, se executarmos o comando especificando a coluna LOJA
, o comando não funcionará.DELETE ADJACENT DUPLICATES t_lojas COMPARING loja.
No exemplo acima os dados da tabela
T_LOJAS
serão comparados apenas pela coluna LOJA
. Registros considerados iguais pela coluna LOJA
serão excluídos, deixando apenas o primeiro encontrado. Porém, como a tabela não estava ordenada pela coluna LOJA
, nenhum registro será excluído.Usando o comando
SORT
antes do comando DELETE ADJACENT DUPLICATES
faz com que os registros fiquem com a disposição correta para as comparações.SORT t_lojas BY loja.
DELETE ADJACENT DUPLICATES t_lojas COMPARING loja.
No exemplo acima, o primeiro comando irá ordenar a tabela
T_LOJAS
pela coluna LOJA
. Em seguida, os dados da tabela T_LOJAS
serão comparados apenas pela coluna LOJA
. Registros considerados iguais pela coluna LOJA
serão excluídos, deixando apenas o primeiro encontrado.No comando
SORT
a tabela T_LOJAS
ficaria com a seguinte disposição:Agora repare que os registros da loja
A002
estão imediatamente um abaixo do outro. Ao processar o comando DELETE ADJACENT DUPLICATES
a tabela T_LOJAS
ficaria assim:Por fim, repare que o registro repetido da loja
A002
não existe mais. É assim que funciona o comando DELETE ADJACENT DUPLICATES
.Comparação por todas as colunas
Existe ainda uma forma de fazer a comparação de repetições por todas as colunas da tabela. Basta acrescentar o parâmetro
COMPARING ALL FIELDS
. Mesmo assim, o comando só funcionará se a tabelas estiver ordenada.DELETE ADJACENT DUPLICATES t_lojas COMPARING ALL FIELDS.
No exemplo acima os dados da tabela T_LOJAS serão comparados por todas as colunas. Registros considerados iguais pela coluna
LOJA
serão excluídos, deixando apenas o primeiro encontrado.Espero que seja útil.
Se alguém quiser compartilhar alguma experiência usando o
DELETE ADJACENT DUPLICATES
, ou se tiver alguma dúvida, fiquem a vontade nos comentários.Um grande abraço e até a próxima.
ótimo conteúdo, muito útil. Obrigado
Postar um comentário