Eliminar registros con claves repetidas?????

19/02/2004 - 13:47 por claudio | Informe spam
Tengo una tabla con datos de Cliente, Zona y NroPedido.
El problema es que deberían ser únicos por estos 3 y NO
lo son. Ya que tengo registros repetidos que tienen el
mismo Cliente, Zona y NroPedido (el resto de los campos
también es igual)
Cómo puedo hacer mediante un DELETE para que me quede un
sólo registro de cada combinación Cliente, Zona y
NroPedido???

Preguntas similare

Leer las respuestas

#6 claudio
19/02/2004 - 16:07 | Informe spam
Ulises los campos coinciden exactamente por lo tanto
puedes eliminar cualquiera.

Espectacular Maxi!!!! Muchas gracias a los 2!!!


Solo un comentario, si bien los tres campos que deberían
ser clave única se repiten, ¿los demás campos de la


tabla
son iguales?, y de ser diferentes ¿cual se debe eliminar


y
cual no?, de no ser ese el caso podrías utilizar lo
indicado por Maxi, pero creo que siempre debes pasar por
una tabla temporal para mayor seguridad.

Saludos,
Ulises

A ver, quizas si.

Hace esto, primero genera un identity en la tabla




maestro
y luego fijate
este ejemplo, adaptalo a tus cosas no

create table #cli (ii int identity,id char(10),nombre


varchar(10))

insert into #cli values ('1','maxi')
insert into #cli values ('1','maxi')
insert into #cli values ('2','maxi')
insert into #cli values ('3','maxi')
insert into #cli values ('4','maxi')
insert into #cli values ('5','maxi')


select * from #cli

delete from #cli where ii not in (select max(ii) from


#cli group by
id,nombre)




Salu2 enormes




-
Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...a/desarrol




la
dor/default.asp
(maxi_accotto[arroba]speedy.com.ar)
MSN:

"claudio"




escribió
en el mensaje
news:1271901c3f6f1$93c77720$
Hola Maxi,

La tabla no tiene FKeys (ya se que debería pero esta




así).
Igualmente la pregunta es:
Es imposible hacerlo sin pasar por una tabla
intermedia????
No se podría hacer con una instrucción Delete????

Muchas gracias!

Hola, se me ocurre que podrias hacer esto:

1) deshabilitar los Fkeys de las tablas hijas con


respecto a esta
2) pasar con un Select a una tabla intermedia todos los


Datos pero
Agrupados, por lo cual no tendras los duplicados
3) Hacer un delete completo de la tabla original
4) Insertar con (insert into) de la tabla intermedia a


la principal
5) Volver a habilitar los Fkeys

Toma este Ejemplo:

create table #cli(id varchar(50),nombre varchar(100))

insert into #cli values('1','maxi')
insert into #cli values('1','maxi')
insert into #cli values('2','maxi')
insert into #cli values('3','maxi')
insert into #cli values('4','maxi')

select * from #cli

select top 0 * into #cli2 from #cli

insert
into #cli2
select max(id),max(nombre) from #cli group by id,nombre

select * from #cli2



Salu2 enormes
-
Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-


-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...na/desarro






ll
ador/default.asp
-


-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-


-

"claudio"






escribió
en el mensaje
news:1267901c3f6e6$8ec482a0$
Tengo una tabla con datos de Cliente, Zona y NroPedido.
El problema es que deberían ser únicos por estos 3 y NO
lo son. Ya que tengo registros repetidos que tienen el
mismo Cliente, Zona y NroPedido (el resto de los campos
también es igual)
Cómo puedo hacer mediante un DELETE para que me quede






un
sólo registro de cada combinación Cliente, Zona y
NroPedido???





.

Respuesta Responder a este mensaje
#7 ulises
19/02/2004 - 19:06 | Informe spam
Entonces también podrías usar un SELECT DISTINCT para
copiar a una tabla temporal, por ejemplo :

create table tabla ( campo1 int, campo2 int, campo3 int,
campo4 int)
go
insert into tabla values ( 1,2,3,4)
insert into tabla values ( 1,2,3,4)
insert into tabla values ( 1,2,3,4)
insert into tabla values ( 1,2,3,4)
insert into tabla values ( 2,2,3,4)
insert into tabla values ( 2,2,3,4)
insert into tabla values ( 2,2,3,4)
insert into tabla values ( 2,2,3,4)
go
select distinct campo1, campo2, campo3, campo4 from tabla
go

campo1 campo2 campo3 campo4
1 2 3 4
2 2 3 4

(2 row(s) affected)

Saludos,
Ulises

Ulises los campos coinciden exactamente por lo tanto
puedes eliminar cualquiera.

Espectacular Maxi!!!! Muchas gracias a los 2!!!


Solo un comentario, si bien los tres campos que deberían
ser clave única se repiten, ¿los demás campos de la


tabla
son iguales?, y de ser diferentes ¿cual se debe eliminar


y
cual no?, de no ser ese el caso podrías utilizar lo
indicado por Maxi, pero creo que siempre debes pasar por
una tabla temporal para mayor seguridad.

Saludos,
Ulises

A ver, quizas si.

Hace esto, primero genera un identity en la tabla




maestro
y luego fijate
este ejemplo, adaptalo a tus cosas no

create table #cli (ii int identity,id char(10),nombre


varchar(10))

insert into #cli values ('1','maxi')
insert into #cli values ('1','maxi')
insert into #cli values ('2','maxi')
insert into #cli values ('3','maxi')
insert into #cli values ('4','maxi')
insert into #cli values ('5','maxi')


select * from #cli

delete from #cli where ii not in (select max(ii) from


#cli group by
id,nombre)




Salu2 enormes




-
Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...a/desarrol




la
dor/default.asp
(maxi_accotto[arroba]speedy.com.ar)
MSN:

"claudio"




escribió
en el mensaje
news:1271901c3f6f1$93c77720$
Hola Maxi,

La tabla no tiene FKeys (ya se que debería pero esta




así).
Igualmente la pregunta es:
Es imposible hacerlo sin pasar por una tabla
intermedia????
No se podría hacer con una instrucción Delete????

Muchas gracias!

Hola, se me ocurre que podrias hacer esto:

1) deshabilitar los Fkeys de las tablas hijas con


respecto a esta
2) pasar con un Select a una tabla intermedia todos los


Datos pero
Agrupados, por lo cual no tendras los duplicados
3) Hacer un delete completo de la tabla original
4) Insertar con (insert into) de la tabla intermedia a


la principal
5) Volver a habilitar los Fkeys

Toma este Ejemplo:

create table #cli(id varchar(50),nombre varchar(100))

insert into #cli values('1','maxi')
insert into #cli values('1','maxi')
insert into #cli values('2','maxi')
insert into #cli values('3','maxi')
insert into #cli values('4','maxi')

select * from #cli

select top 0 * into #cli2 from #cli

insert
into #cli2
select max(id),max(nombre) from #cli group by id,nombre

select * from #cli2



Salu2 enormes
-
Maximiliano Damian Accotto

Fundicion San Cayetano S.A.
Gerente de IT
Buenos Aires - Argentina
-


-
Desarrollador 3 estrellas
http://www.microsoft.com/spanish/ms...na/desarro






ll
ador/default.asp
-


-
(maxi_accotto[arroba]speedy.com.ar)
MSN:
-


-

"claudio"






escribió
en el mensaje
news:1267901c3f6e6$8ec482a0$
Tengo una tabla con datos de Cliente, Zona y NroPedido.
El problema es que deberían ser únicos por estos 3 y NO
lo son. Ya que tengo registros repetidos que tienen el
mismo Cliente, Zona y NroPedido (el resto de los campos
también es igual)
Cómo puedo hacer mediante un DELETE para que me quede






un
sólo registro de cada combinación Cliente, Zona y
NroPedido???





.



.

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