Borrar registros de SQL

03/07/2003 - 01:45 por Federico Francois | Informe spam
Mi consulta es la siguiente.
Tengo una base de datos con registros repetidos , ya que
no tiene ninguna clave principal.
Me gustaria borrar solamente los registros repetidos.
pero mi problema es el siguiente, si hogo "delete from
miTabla where registro = valor" , se me borran ambos
registros y mi idea es conservar solamente 1 de los
registros que se encuentra repetido.

Desde ya muchas gracias.

Preguntas similare

Leer las respuestas

#1 Javier Loria\(MVP\)
03/07/2003 - 02:04 | Informe spam
Hola Federico:
La forma mas facil (hay otras) es hacer un SELECT agrupado por el
cadidato de la llave Primaria, y con algun criterio de seleccion sobre las
demas columnas. Insertarlo en una tabla Temporal, borrar los datos y luego
Insertarlos. Algo como:
/* Pseudocodigo */
SELECT Columna1, MAX(Columna2), MIN(Columna3)
INTO #NuevaTabla
FROM MiTabla
GROUP BY Columna1

DELETE MiTabla

INSERT MiTabla
SELECT * FROM #NuevaTabla

DROP TABLE #NuevaTabla
/* Fin de Pseudocodigo */

Si no es una solucion razonable, vemos otras alternativas.


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Federico Francois" wrote in message
news:0d2a01c340f3$fe8b52c0$
Mostrar la cita
#2 Isaías
03/07/2003 - 02:10 | Informe spam
Hola Javier

Seria un placer para mi, recibir un comentario sobre mi
solucion.

Saludos
#3 Javier Loria\(MVP\)
03/07/2003 - 03:31 | Informe spam
Hola Isaias:
Comparto contigo lo de preguenta recurrente.
Una consulta sobre tu procedimiento, la sentencia:
Mostrar la cita
No borra TODOS las Filas que tienen esa "Llave Primaria" ?
Aun cuando soy enemigo de los CURSORES este es un caso donde
consideraria seriamente usar uno, porque aun cuando el procedimiento que
envie es muy eficiente si hay muchas filas repetidas, en el caso que hay
miles o millones no repetidas y unas cuantas NO repetidas no debe ser muy
eficiente.
Una solucion alternativa es solo borrar los repetidos, haciendo el
INSERT, DELETE e INSERT solo para los que tienen COUNT(*)>1

Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"Isaías" wrote in message
news:043901c340f7$1a277880$
Mostrar la cita
#4 Liliana Sorrentino
03/07/2003 - 16:16 | Informe spam
Si me permiten, me parece entender en el mensaje de Federico que tiene
"registros duplicados", y me imagino registros completos, no solo "claves
duplicadas".
En la solución de Isaías (sabés que odio los CURSORES Isaías) no borra TODAS
las filas, deja una, por lo de:
SELECT MyCol1, MyCol2, (count(*) - 1) as Duplicates (muy astuto)

¿Qué tal un...

select *
into #test_nuevo
from #test
union
select * from #test

Si comparo esto con la opción del CURSOR, el costo no solo es más bajo, sino
que disminuye considerablemente cuantos más repetidos hay.
Solo como opción. Federico tendrá la última palabra.
Saludos... Liliana.


"Javier Loria(MVP)" escribió en el mensaje
news:#
Mostrar la cita
#5 Federico François
03/07/2003 - 19:33 | Informe spam
Mi problema se asemeja al que Liliana comenta. Los campos no tienen niniguna
clave principa y estan identicamente repetidos. Y al estar repetidos me
aparecen mas de una vez en las consultas , hacer un select distinct es una
solucion para mi a la hora de mostrar los datos , pero los datos que tengo
duplicados ocupan un lugar muy valioso en la base de datos , y ademas me
enlentecen el retorno de datos.
Solo me quiero quedar con un ejemplar , en caso que esten repetidos .

Si hago un Select * from mi tabla , este me devuelve 15000 registros
en cambio
Si hago un Select distinct from mi tabla , este me devuelve 13000
registros

a lo que deduzco que hay 2000 repetidos que quiero remover

Muchas gracias





"Liliana Sorrentino" escribió en el mensaje
news:
Mostrar la cita
TODAS
Mostrar la cita
sino
Mostrar la cita
muy
Mostrar la cita
Ads by Google
Search Busqueda sugerida