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

[SOLUCIONADO] ¿Como eliminar duplicados similares

Estas en el tema de ¿Como eliminar duplicados similares en el foro de Mysql en Foros del Web. Hola estoy agregando datos a una tabla pero necesito eliminar duplicados similares Por ejemplo tengo una columna con los siguientes valores old1950 old1933 old1985 new1950 ...
  #1 (permalink)  
Antiguo 29/04/2013, 12:54
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años
Puntos: 0
Pregunta ¿Como eliminar duplicados similares

Hola estoy agregando datos a una tabla pero necesito eliminar duplicados similares

Por ejemplo tengo una columna con los siguientes valores

old1950
old1933
old1985
new1950
new1985
new2008

debería quedar.


old1950
old1933
old1985
new2008

Como ven también se le debe dar preferencia a los registros antiguos.
¿Como puedo resolver esto?
  #2 (permalink)  
Antiguo 29/04/2013, 14:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Como eliminar duplicados similares

Si conocer la estructura de tabla, sus relaciones e índices que existan, sólo te puedo decir que debes usar DISTINCT:
Código MySQL:
Ver original
  1. SELECT DITINCT a, b, c,
  2. FROM tabla
En cuanto al orden de aparición, no sirve ordenar por los valores que pones, porque son alfanuméricos, y se ordenaran como tales, con lo que los que comienzan en "new" irán antes de los "old".
A menos que tengas otro campo sobre el que apoyarte, que permita saber la secuencia temporal de entrada o algo así.... no podrás ordenarlos de ese modo.
__________________
¿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 29/04/2013, 14:43
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: ¿Como eliminar duplicados similares

Hola E_Blue, al margen de lo que comenta gnzsoloyo, según entendí para ti los valores (old1950 y new1950) es un valor duplicado ¿correcto? es decir, el valor numérico que contiene cada registro es el mismo, pero no te interesa si dice old o new...

Si esto es correcto entonces la cláusula DISTINCT no te serviría, al menos no de la manera en que lo está considerando gnzsoloyo... aquí se me ocurriría hacerlo con una UNION... sería más o menos así:

Código:
SELECCIONAR * FROM tu_tabla DONDE APAREZCA LA PALABRA 'old'
UNION
SELECCIONAR * FROM tu_tabla DONDE APAREZCA LA PALABRA 'new' siempre y cuando NO EXISTA en los registros con old un registro con la parte numérica igual...
para extraer la parte numérica de la cadena, puedes hacerlo de distintas maneras, suponiendo que tienes un patrón de tres caracteres y cuatro cifras, lo podrías hacer con RIGHT:

Código MySQL:
Ver original
  1. mysql> SELECT campo, RIGHT(campo, 4) FROM tabla;
  2. +---------+-----------------+
  3. | campo   | RIGHT(campo, 4) |
  4. +---------+-----------------+
  5. | old1950 | 1950            |
  6. | old1933 | 1933            |
  7. | old1985 | 1985            |
  8. | new1950 | 1950            |
  9. | new1985 | 1985            |
  10. | new2008 | 2008            |
  11. +---------+-----------------+
  12. 6 rows in set (0.05 sec)

haz el intento y nos comentas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 29/04/2013, 15:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años
Puntos: 0
Respuesta: ¿Como eliminar duplicados similares

@leonardo_josue, lo de la parte numérica es correcto, lo del encabezado necesito dejar los 'old'; es decir si encuentra un 'old1950' y un 'new1950' quisiera que elimine 'new1950'

El tema este es porque estoy haciendo una mudanza de datos desde un server que se va a dar de baja a un server nuevo que tiene ya 200 clientes dados de alta y esos 200 clientes están en ambos servidores actualmente; entonces quiero evitar que me queden clientes repetidos cuando pase del server viejo al server nuevo.

Por eso es que mude los clientes del server viejo al server nuevo con el prefijo new para diferenciarlos y borrarlos de ser necesario.

Ademas cree una tabla gemela en el server nuevo para poder hacer pruebas y que el soft(pagina web) que usa la tabla real no me moleste ni yo a el.


Estoy tratando de armar el query que me dices pero no entiendo como hacer

Cita:
...siempre y cuando NO EXISTA en los registros con old un registro con la parte numérica igual..

Última edición por E_Blue; 29/04/2013 a las 15:29
  #5 (permalink)  
Antiguo 29/04/2013, 16:41
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años
Puntos: 0
De acuerdo Respuesta: ¿Como eliminar duplicados similares

Encontré la solución y la comparto, aclaro que no la idee yo, obtuve la solución en otro foro.

Código MySQL:
Ver original
  1. CREATE TABLE yourtable (
  2.   `accountID` varchar(32) NOT NULL,
  3.   `deviceID` varchar(32) NOT NULL,
  4.   col VARCHAR(20),
  5.   PRIMARY KEY (`accountID`,`deviceID`)
  6.   );
  7.  
  8. INSERT INTO yourtable VALUES
  9. (1,1,'old1950'),
  10. (1,2,'old1933'),
  11. (1,3,'old1985'),
  12. (1,4,'new_1950'),
  13. (1,5,'new_1985'),
  14. (1,6,'new_2008');
  15.  
  16.   yourtable y1 INNER JOIN yourtable y2
  17.   ON y1.col LIKE 'new_%' AND y2.col LIKE 'old%'
  18.      AND SUBSTR(y1.col, 5)=SUBSTR(y2.col, 4)

Gracias por tomarse tiempo de leer este post para intentar ayudarme.

Etiquetas: duplicados
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 18:11.