Ir para conteúdo
Fórum Script Brasil
  • 0

Registros Duplicados: ASP + Access


Rafael Spilki

Pergunta

Bom dia povo, tudo numa boa?

Então, estou com a seguinte dúvida: como criar uma query para mostrar todo e qualquer registro que estiver duplicado em uma mesma tabela usando como comparação 6 campos?

Como exemplo campos genéricos: codigo, campo1, campo2, campo3, campo4, campo5 e campo6.

Ou seja, gostaria de criar um select que mostrasse todos os registros repetidos, ou seja:

codigo = 1

campo1 = 1

campo2 = 1

campo3 = 1

campo4 = 1

campo5 = 1

campo6 = 1

codigo = 2

campo1 = 1

campo2 = 1

campo3 = 1

campo4 = 1

campo5 = 1

campo6 = 1

codigo = 3

campo1 = 1

campo2 = 1

campo3 = 1

campo4 = 1

campo5 = 1

campo6 = 1

O resultado deste select deveria ser: 1 e 2 (visto que o 3 é o mais atual e é este que deve permanecer), sacaram?

Tive revisando alguns tutos que tenho aqui e não consegui fazer. A sintaxe para fazer isso em mysql eu tenho, utilizando having, mas em access não conseguit de forma alguma. Se alguém tiver qualquer dica será muito bem vinda.

[]'s Rafael Spilki

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Não Veinho... aí é que ta...

Quero saber todos os repetidos sem variáveis anteriores... ou seja, tenho que correr um recordset que compare e mostre todos os registros menos o último adicionado (autonum maior)

O comparativo em mysql seria assim:

1.Select para localizar duplicados
    select campo,campo1,count(*)
     from tabela having count(*) > 1
    group by campo,campo1

  2.Como deletar duplicados
   delete from tab p1
   where rowid < (select max(rowid)
                    from tab1 p2
                   where p1.primary_key = p2.primary_key);

Fonte: http://www.linhadecodigo.com.br/dica/967/C...duplicados.aspx

Sacou?

Link para o comentário
Compartilhar em outros sites

  • 0

SELECT * FROM tabela

WHERE campo1=campo2=campo3=campo4=campo5=campo6

ORDER BY codigo DESC

Como o SQL acima, o que você NÃO quer excluir ficará em primeiro lugar. Daí é só excluir da linha 2 pra baixo.

Não tive como fazer uma SQL prontinha pra deletar pois trabalho com o DB Mysql , daí não dava pra ir testando pois os comandos são meio diferentes (com mysql eu poderia exibir só o primeiro ou só os outros usando o comando LIMIT que não está presente no DB Access acho).

Link para o comentário
Compartilhar em outros sites

  • 0

Não gente... num é isso não...

Imaginem uma tabela, nessa tabela temos os seguintes registros por linha:

codigo = 1 | campo1 = 1 | campo2 = 1 | campo3 = 1 | campo4 = 1 | campo5 = 1 | campo6 = 1

codigo = 2 | campo1 = 1 | campo2 = 1 | campo3 = 1 | campo4 = 1 | campo5 = 1 | campo6 = 1

codigo = 3 | campo1 = 1 | campo2 = 1 | campo3 = 1 | campo4 = 1 | campo5 = 1 | campo6 = 1

Ou seja, tenho registros duplos ou triplos... enfim, registros que podem estar repetidos até centenas de vezes...

Imaginem que eu posso ter vários cadastros da mesma pessoa iguaisinhos... sem alterar nada... ou seja, vários registros do:

paulo josé, com cpf 001 e rg 001... isso 20 vezes repetidos, sacaram? só preciso ter uma vez o paulo josé nessa tabela...

O que eu quero é deletar todos os repetidos mantendo apenas o registro mais atual, que é exatamente o que tiver numero de código maior visto codigo ser autonum...

Sacaram?

Link para o comentário
Compartilhar em outros sites

  • 0

aaaa, então você não está sabendo explicar.

Segundo a tabelinha que você desenhou acima, você tá mostrando uma tabela onde campo1 = campo2 = campo3

Leia novamente sua explicação e veja que você explicou mal.

Então você quer buscar são registros iguais na tabela, certo?

Uma pergutna: Podem haver dois Paulos Bernardes, com o mesmo CPF e nome na tabela, porém com endereços diferentes?

Link para o comentário
Compartilhar em outros sites

  • 0

Fala micox... cara pegou... é exatamente isso! Peço desculpas se expliquei mau.

Então, os campos que quero comparar são três, o resto não importa, então vamos considerar pro exemplo os campos:

nome, cpf e rg

respondendo sua pergunta: sim e não... o que acontece é que NÃO podem haver dois com apenas uma dessas informações acima diferentes... são iguais mesmo... o que pode acontecer é um outro campo (um quarto campo ou quinto campo) de data por ex. ser diferente, mas gostaria de nesse caso específico ignorar essa informação do campo data ou no seu exemplo do campo endereço... saca?

[]'s

Editado por Rafael Spilki
Link para o comentário
Compartilhar em outros sites

  • 0

Cara, o SQL (principalmente o do Access) por si só não dará conta de fazer este trabalho ACHO (não sou especialista em sql no access).

você precisará de ajuda do asp pra fazer este trabalho.

1) primeiro você irá listar TODO mundo da tabela e ordenar decrescente

SELECT * FROM tabela ORDER BY codigo DESC

2) Depois você irá resultado por resultado procurando deletando campos duplicados

DELETE * FROM tabela WHERE codigo<> rs[codigo] AND nome LIKE rs[nome] AND cpf LIKE rs[cpf] AND rg LIKE rs[rg]

Simples. Acho que é só isso mesmo.

----------

Acho que até que dá pra fazer um SQL fodão que faria o delete dos campos duplicados exceto o último se você usar um GROUP BY, codigo <> max(ultimas.codigo), etc

Mas seria algo complicado e arriscado. Acho melhor fazer na mão via ASP mesmo.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...