Buenas mi duda es la siguiente:
Tengo una base de datos con con elementos duplicados por ejemplo, dos nº de teléfono repetidos y quiero borrar los duplicados y quedarme sólo con un registro.
¿Como sería la consulta?
Muchas gracias.
| |||
Borrar duplicados Buenas mi duda es la siguiente: Tengo una base de datos con con elementos duplicados por ejemplo, dos nº de teléfono repetidos y quiero borrar los duplicados y quedarme sólo con un registro. ¿Como sería la consulta? Muchas gracias. |
| |||
Respuesta: Borrar duplicados Es una tabla en la que hay valores repetidos y yo quiero borrarlos y quedarme sólo con uno. Por ejemplo dos personas distintas con el mismo teléfono, pues yo quiero borrar a una de esas personas para tener sólo un teléfono. Gracias. |
| ||||
Respuesta: Borrar duplicados Yo te entendí. Tu no has entendido cómo se implementa eso. Para poder borrar un conjunto de datos duplicados, lo primero que debes lograr es, o agrupar los que quieres mantener o determinar los que quieres eliminar. En el primer caso deberías: - Volcar en una tabla nueva todos aquellos que quieres mantener, descartando los duplicados. - Vaciar la tabla original. - Volver a poner en la tabla original los que guardaste. -Eliminar la tabla transitoria. En el segundo caso: - Determinar, por medio de una consulta, qué condición o condiciones cumplen solamente los registros que deseas borrar, volcando lo todo en una tabla temporal. - Iterar uno a uno los registros encontrados y borrarlos de la tabla origen. - Descartar la tabla temporal. No puedes indicar simplemente borrar esos registros, porque si el contenido de las duplicidades es exactamente el mismo entre dos registros dados, MySQL no podrá diferenciar entre ambos y los borrará todos. Por eso la forma simple es hacer alguno de los dos procesos que te menciono. En cualquier caso tu problema es un problema de lógica y no de sentencias: ¿Cómo lograr determinar cuáles registros descartar, sin descartar todos? Por otro lado, esto: Cita: no tiene mucho sentido para mí...Por ejemplo dos personas distintas con el mismo teléfono, pues yo quiero borrar a una de esas personas para tener sólo un teléfono. ¿Qué representa esa tabla, en donde lo importante es el teléfono y no la persona? ¿Cómo defines con qué persona quedarte? Me parece que tienes que plantearte mejor el problema.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: Borrar duplicados Gracias, ya sé que no tiene mucha lógica lo del teléfono pero es el filtro que tengo que usar. Lo voy a plantear con la edad a ver si así está más claro: Por ejemplo quiero tener una persona de cada edad y en mi tabla aparecen dos personas con 20 años y tres con 23, lo que yo quiero es quedar con sólo una persona de 20 años y una de 23. No consigo quedarme con una persona de cada, por ejemplo con una de 20 pero me borra todas las de 23, esta es la consulta que tengo hecha DELETE Tabla1.edad, Tabla1.nombre FROM Tabla1 WHERE (((Tabla1.edad) In (SELECT [edad] FROM [Tabla1] As Tmp GROUP BY [edad] HAVING Count(*)>1 ))) AND Tabla1.Id1 < (SELECT MAX(Tabla1.id1) FROM Tabla1); ¿Podrías ayudarme? Gracias |
| ||||
Respuesta: Borrar duplicados Cita: Precisamente ese es el tipo de problemas a que me refiero.No consigo quedarme con una persona de cada, por ejemplo con una de 20 pero me borra todas las de 23, esta es la consulta que tengo hecha La única forma de poder ayudarte con precisión sería estar sentado frente a tu PC realizando el análisis de datos necesario, cosa que no puede ser. Como pareces sugerir, el problema que tienes requiere un análisis de datos puntual. Primero, mi sugerencia es que separes en una tabla todos aquellos casos que están efectivamente duplicados. De nada te servirá mirar toda la tabla si no toda la tabla tiene el mismo problema. Uno de los problemas que tienes es que no puedes hacer un SELECT y DELETE en la misma sentencia, por lo que la única forma práctica sería volcar todos los datos a otra tabla. ara ello vamos a probar de guardar aquellas personas e mayor edad (el principio para guardar los menores sólo requiere cambiar la función: Guardar sin discriminar edades:
Código MySQL:
Ver original Discriminando edades máximas requiere poner todos los campos para poder indicar el agrupamiento correctamette
Código MySQL:
donde a, b, c, d, e, f, g y h, son los nombres de los campos de la tabla en el mismo orden de la tabla, por lo que "MAX(edad) edad" deberá ocupar el lugar correspondiente a la edad.Ver original Este agrupamiento generará una tabla simplificada que luego usamos para borrar los excedentes por medio de su PK: Mas o menos esto, podría andar.... Esto es lo que se denomina en ocasiones "migrar datos entre tablas" o "depurar tablas", y como verás no se peude hacer en una sola sentencia. Lo principal, una vez que termines esto es asegurarte que la fuente de datos, es decir, el formulario desde el cual estos registros se ingresan, tenga una validación que impida insertar un teléfono duplicado. Una forma drástica es declarar el telefono como UNIQUE. Eso generará un error de registro duplicado cada vez que se intente ingresar un teléfono que ya exista.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
Etiquetas: |