Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vivi@ne

Deletar todos repetidos menos um

Recommended Posts

Boa noite,

 

Tenho o seguinte código que grava um arquivo e para posterior consulta grava os dados no bd. Até aí beleza. Só que como está dentro de um FOR/NEXT está duplicando os registros.

 

Agora pra não duplicar estou tentando apagar o que estiver repetindo, mas não to achando uma solução pra isso...

 

Segue a parte do código que apagaria os duplicados e que não tá funcionando...

 

SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"
set rsd1 = Conn.Execute(SQLD1)

WHILE NOT rsd1.EOF
nEmail = rsd1("iddig")

SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "'" )
SET RSDEL1 = Conn.Execute(SQLDEL1)
if not RSDEL1.eof then
total = RSDEL1("TOTAL")
if total > "1" then

SQLDEL = ("delete from fechados where iddig = '"&nEmail&"'")
Conn.Execute(SQLDEL)

End if
rsd1.MOVENEXT
End if
WEND

Ele apaga todos os registros, depois tentei assim e aí não apaga os duplicados:

 

SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"
set rsd1 = Conn.Execute(SQLD1)
WHILE NOT rsd1.EOF
nEmail = rsd1("iddig")

SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "'" )
SET RSDEL1 = Conn.Execute(SQLDEL1)
if not RSDEL1.eof then
total = RSDEL1("TOTAL")
if total > "1" then

SQLDEL = ("delete from fechados WHERE iddig NOT IN (SELECT max(iddig) FROM digisalva WHERE iddig = '" & nEmail & "')" )
Conn.Execute(SQLDEL)

End if
rsd1.MOVENEXT
End if
WEND

Se alguém puder dar uma forcinha... já fucei o forum mas não achei nada que desse certo.

 

Bjs

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou assim:

 

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

 

deletar duplicados

delete from tab p1
  where rowid < (select max(rowid)
                   from tab1 p2
                  where p1.primary_key = p2.primary_key)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou assim:

 

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

 

deletar duplicados

delete from tab p1
  where rowid < (select max(rowid)
                   from tab1 p2
                  where p1.primary_key = p2.primary_key)

 

Mas me explica uma coisa...

No Select estou usando apenas um campo para diferenciar, no caso você descreve campo, campo1 como 2 diferentes certo?

No Delete também um outro problema, estou usando apenas uma tabela e você cescreve tab p1 e tab1 p2, mas não dá pra eu fazer a comparação dessa forma se uso apenas uma tabela, né...

 

Vlw mesmo assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select para localizar duplicados
select iddig 
from fechados having count(*) > 1

 

deletar duplicados

 

delete from fechados where rowid < (select max(rowid)
from fechados where iddig = '" & nEmail & "'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select para localizar duplicados
select iddig 
from fechados having count(*) > 1

 

deletar duplicados

 

delete from fechados where rowid < (select max(rowid)
from fechados where iddig = '" & nEmail & "'

 

nãos sei se é a versão de MySql que estou usando, mas diz que não posso usar a tabela fechados no select que esta dentro do delete...

 

estou usando a seguinte função para apagar registros duplicados e parece que deu certo até agora :.)

 

SQLD1 = "select distinct iddig FROM fechados where protocolo = '"&protocolo&"' and gerado = '"&gerado&"' and ativo = '"&ativo&"'"

set rsd1 = Conn.Execute(SQLD1)

if NOT rsd1.EOF then

nEmail = rsd1("iddig")

SQLDEL1 = ("Select COUNT(iddig) AS TOTAL FROM fechados where iddig = '" & nEmail & "' " )

SET RSDEL1 = Conn.Execute(SQLDEL1)

if not RSDEL1.eof then

total = RSDEL1("TOTAL")

if total > "1" then

SQLDEL = ("delete from fechados WHERE ativo = '"&ativo&"' and iddig not in (Select id from digisalva where reincidente = '"&pasta&"') " )

Set RSDEL = Conn.Execute(SQLDEL)

rsd1.movenext

End if
End if
End if

Agradeço pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.