Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Borrar registros repetidos según una condición

Estas en el tema de Borrar registros repetidos según una condición en el foro de Mysql en Foros del Web. Hola a tod@s. Necesito ayuda con una consulta. Supongamos que tengo los siguientes registros en una tabla: Color - flag Azul - 1 Azul - ...
  #1 (permalink)  
Antiguo 07/06/2014, 06:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Borrar registros repetidos según una condición

Hola a tod@s.
Necesito ayuda con una consulta. Supongamos que tengo los siguientes registros en una tabla:

Color - flag
Azul - 1
Azul - 2
Rojo - 1
Rojo - 2
Verde - 2
Gris - 1

Quiero borrar los colores repetidos cuyo flag valga 2. En este ejemplo tendría que borrar Azul-2 y Rojo-2

¿Alguien me podría ayudar con la consulta, por favor?

Gracias. Un saludo.
  #2 (permalink)  
Antiguo 07/06/2014, 09:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Borrar registros repetidos según una condición

No se puede hacer en una sola consulta. Ese tipo de depuración de datos requiere al menos de dos pasos, y usualmente se hace por medio de una tabla temporal intermedia.
No se puede hacer en un solo paso porque el DBMS no admite que consultes y actualices la tabla en la misma query.
Este es un tema recurrente, y siempre sugerimos ese camino.
Toda otra alternativa implica programación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/06/2014, 10:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: Borrar registros repetidos según una condición

Ah, ya decía yo.
Lo haré con programación entonces, a ver.

Gracias. Un saludo.
  #4 (permalink)  
Antiguo 08/06/2014, 03:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Borrar registros repetidos según una condición

No es necesario hacerlo todo con programación. Con dos consultas te bastará, como te sugiere gnzsoloyo (con una no, pero...). Probablemente también con un proceso almacenado.

En la primera obtienes los colores repetidos y con 2 en el segundo campo. Entiendo que solo hay números 1 y 2 en flag

Código MySQL:
Ver original
  1. SELECT color FROM tutabla GROUP BY color HAVING COUNT(*) >1
con programación formo una cadena con esos colores repetidos, de la siguiente manera, por poner un ejemplo 'azul', 'rojo', 'amarillo' y la cargo en una variable que puedo llamar colorrepetido2 (eso con programación) .

luego el resultado de esa consulta, que son los colores que se repiten los incluyo en otra consulta de borrado
Código MySQL:
Ver original
  1. DELETE FROM tutabla WHERE flag = 2 AND color IN (@colorrepetido2)
Haz alguna prueba. Sin embargo, tal vez no te valdría si las posibilidades son más. Por ejemplo, que haya una bandera 2 y otra 3 para un mismo color y en ese caso no quisieras borrarlo.
  #5 (permalink)  
Antiguo 10/06/2014, 04:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: Borrar registros repetidos según una condición

Gracias jurena. A final lo tenía hecho como lo has puesto tú.
Cuando dices que me puede fallar si hay otros valores para la bandera, lo he estado pensando y no veo que tenga que haber problemas, no se si se me está escapando algo. Si le especifico en la segunda sentencia que solo quiero borrar los que tengan el flag igual a 2 debería funcionar, ¿no?.

Por cierto, cuando pones eso de " AND color IN (@colorrepetidos)", ¿eso como va?
Yo lo que he hecho ha sido, mediante programación, crearme con el array de colores repetidos un string de la forma:

AND (color='azul' OR color='rojo')

¿Como se puede usar un array en una sentencia en mysql?. Eso no lo conozco.
¿Me podrías indicar un link donde explique ese tema?

Un saludo.
  #6 (permalink)  
Antiguo 16/06/2014, 15:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Borrar registros repetidos según una condición

Nexus,
perdona, he estado fuera, pero te diré que lo has hecho como debías hacerlo. No existen arrays en MySQL y lo que hice fue escribir la variable al modo en que se escriben en MySQL, pero tú lo has interpretado bien, aunque el modo de escribirlo es
AND color IN ('azul','rojo')
algo que es fácil de crear con programación, pero lo que has hecho tú también funciona.

Etiquetas: condición, registro, registros, repetidos, según, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:40.