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

#1 Maximiliano Damian Accotto
19/02/2004 - 14:41 | Informe spam
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...efault.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
#2 claudio
19/02/2004 - 15:06 | Informe spam
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.../desarroll


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
#3 Maximiliano Damian Accotto
19/02/2004 - 15:18 | Informe spam
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...efault.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.../desarroll


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
#4 ulises
19/02/2004 - 15:42 | Informe spam
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...desarrolla


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.../desarroll


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
#5 Maximiliano D. A.
19/02/2004 - 15:58 | Informe spam
;-), tal cual, por eso primero aconseje el uso de la temporal, porque en la
mayoria de los casos se puede dar lo que vos decis.

pd: que importante que es el diseño verdad, dedicarle tiempo a ello se paga
solito solito ;-)


Salu2
Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:


"ulises" escribió en el mensaje
news:131b201c3f6f6$a1f2d6a0$
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...desarrolla


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.../desarroll


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???








Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.581 / Virus Database: 368 - Release Date: 09/02/2004
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida