borrar duplicados

30/01/2006 - 19:40 por Mauro | Informe spam
por un problema en una aplicacion se duplicaron las entradas en una tabla
que no tiene clave primaria.
aunque identifico cuales son los registros duplicados, no se me ocurre como
puedo hacer para borrarlos , ya que no
cuento con un identificador unico,
como puedo hacerlo, teneindo en cuenta que las filas son identicas para
borrar uno de los 2 registros y asi dejar la base consistente.

saludos
Mauro.

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
31/01/2006 - 16:31 | Informe spam
Mauro,

Por que no icluyes el filtro de la fecha en esta sentencia?. De esta forma
estariamos comparando sentencias similares.

begin tran
delete from bup where id not in (select minid from table_a) --1.07
and myid in (select myid from table_a)
rollback tran



delete from bup where id not in (select minid from table_a) --1.07
and myid in (select myid from table_a)
and starttime between '20051001' and '20051028'


AMB

"Mauro" wrote:

ya entiendo el script, ahora, me resulto mas rapido crear un tabla con los
datos a borrar/preservar, y luego usar esa tabla en el where
ej:
esto demora 1.57 min

select myid, COUNT(myid) cant, min(id) minid into table_a --50 seg
FROM bup WITH (NOLOCK)
where starttime between '20051001' and '20051028'
group by myid having COUNT(myid)>1
order by myid

begin tran
delete from bup where id not in (select minid from table_a) --1.07
and myid in (select myid from table_a)
rollback tran

y esto demora 2.36 min

begin tran2.36min
delete bup
where starttime between '20051001' and '20051028'
and exists(
select *
from bup as t2
where
starttime between '20051001' and '20051028'
and t2.myid = bup.myid
and t2.id < bup.id
)
rollback tran


"Alejandro Mesa" wrote in message
news:
> Mauro,
>
> Adiciona un identificador unico, elimina los duplicados y luego eliminas
el
> identificador.
>
> Ejemplo:
>
> alter table t1
> add c1 int not null identity(1, 1)
> go
>
> create unique nonclustered index t1_c1_u_nc_idx
> on t1 (c1 asc)
> go
>
> delete t1
> where exists(
> select *
> from t1 as t2
> where
> t2.c_a = t1.c_a
> t2.c_b = t1.c_b
> ...
> t2.c_n = t1.c_n
> and t2.c1 < t1.c1
> )
>
> drop index t1_c1_u_nc_idx
> go
>
> alter table t1
> drop column c1
> go
>
>
> AMB
>
> "Mauro" wrote:
>
> > por un problema en una aplicacion se duplicaron las entradas en una
tabla
> > que no tiene clave primaria.
> > aunque identifico cuales son los registros duplicados, no se me ocurre
como
> > puedo hacer para borrarlos , ya que no
> > cuento con un identificador unico,
> > como puedo hacerlo, teneindo en cuenta que las filas son identicas para
> > borrar uno de los 2 registros y asi dejar la base consistente.
> >
> > saludos
> > Mauro.
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida