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

[SOLUCIONADO] Valores Duplicados

Estas en el tema de Valores Duplicados en el foro de Mysql en Foros del Web. Hola he visto varios post sobre valores duplicados, pero no veo como recuperar los valores de mi tabla sin duplicar. bd: campo: correo | campo: ...
  #1 (permalink)  
Antiguo 11/02/2013, 07:37
ERR
 
Fecha de Ingreso: febrero-2012
Ubicación: Escazu
Mensajes: 18
Antigüedad: 12 años, 3 meses
Puntos: 1
Pregunta Valores Duplicados

Hola he visto varios post sobre valores duplicados, pero no veo como recuperar los valores de mi tabla sin duplicar.

bd:
campo: correo | campo: dato
[email protected] | dato1 (duplicado)
[email protected] | dato1
[email protected] | dato1
[email protected] | dato2
[email protected] | dato2 (duplicado)
[email protected] | dato2
[email protected] | dato2

realizo este query:
Código MySQL:
Ver original
  1. INSERT INTO temporal
  2. FROM test
  3. GROUP BY datos
  4. HAVING (COUNT(datos) > 1);
esto me guarda
1 [email protected] | dato1
3 [email protected] | dato2

necesito recuperar estos valores, el campo correo puede tener datos repetidos pero no duplicados.

[email protected] | dato2
[email protected] | dato1
[email protected] | dato1
[email protected] | dato2
[email protected] | dato2


alguien sabe como debe ser el query ?

Última edición por gnzsoloyo; 11/02/2013 a las 07:46 Razón: Mal etiquetado. Se pierde la comprensión del código.
  #2 (permalink)  
Antiguo 11/02/2013, 07:48
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: Valores Duplicados

En realidad es medio de manual. Si te fijas en tu propia sentencia, el problema es que estás agrupando por un sólo campo cuando en realidad quieres que muestre la diferencia entre dos campos:
Código MySQL:
Ver original
  1. INSERT INTO temporal
  2. FROM test
  3. GROUP BY correo, datos
  4. HAVING (COUNT(datos) > 1);
__________________
¿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 11/02/2013, 07:55
ERR
 
Fecha de Ingreso: febrero-2012
Ubicación: Escazu
Mensajes: 18
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Valores Duplicados

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En realidad es medio de manual. Si te fijas en tu propia sentencia, el problema es que estás agrupando por un sólo campo cuando en realidad quieres que muestre la diferencia entre dos campos:
Código MySQL:
Ver original
  1. INSERT INTO temporal
  2. FROM test
  3. GROUP BY correo, datos
  4. HAVING (COUNT(datos) > 1);
Hola amigo con esta sentencia solo me devuelve un valor, yo necesito recuperar los valores que no estan duplicados.

1 [email protected] | dato1


Saludos
  #4 (permalink)  
Antiguo 11/02/2013, 11:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Valores Duplicados

Hola ERR:

No me queda claro qué es lo que necesitas obtener como salida... según yo, lo que quieres hacer es que aquellos registros que se encuentran duplicados (es decir, la combinación entre correo y dato) sólo se presente una vez, si esto es correcto, la cláusula DISTINCT sería suficiente:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +---------------+-------+
  3. | correo        | dato  |
  4. +---------------+-------+
  5. | [email protected] | dato1 |
  6. | [email protected] | dato1 |
  7. | [email protected]  | dato1 |
  8. | [email protected]  | dato2 |
  9. | [email protected]  | dato2 |
  10. | [email protected]    | dato2 |
  11. | [email protected] | dato2 |
  12. +---------------+-------+
  13. 7 rows in set (0.00 sec)
  14.  
  15. mysql> SELECT DISTINCT correo, dato FROM tabla;
  16. +---------------+-------+
  17. | correo        | dato  |
  18. +---------------+-------+
  19. | [email protected] | dato1 |
  20. | [email protected]  | dato1 |
  21. | [email protected]  | dato2 |
  22. | [email protected]    | dato2 |
  23. | [email protected] | dato2 |
  24. +---------------+-------+
  25. 5 rows in set (0.05 sec)

Ahora bien, si lo que necesitas obtener son los valores que no están duplicados, podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT T1.* FROM Tabla T1
  2.     -> LEFT JOIN
  3.     -> ( SELECT correo, dato
  4.     ->   FROM tabla
  5.     ->   GROUP BY correo, dato
  6.     ->   HAVING COUNT(*) > 1) T2
  7.     -> ON T1.correo = T2.correo AND T1.dato = T2.dato
  8.     -> WHERE T2.correo IS NULL;
  9. +---------------+-------+
  10. | correo        | dato  |
  11. +---------------+-------+
  12. | [email protected]  | dato1 |
  13. | [email protected]    | dato2 |
  14. | [email protected] | dato2 |
  15. +---------------+-------+
  16. 3 rows in set (0.00 sec)

Dale un vistazo para ver si algo de esto te sirve.

Saludos
Leo
  #5 (permalink)  
Antiguo 11/02/2013, 13:44
ERR
 
Fecha de Ingreso: febrero-2012
Ubicación: Escazu
Mensajes: 18
Antigüedad: 12 años, 3 meses
Puntos: 1
Respuesta: Valores Duplicados

Buena nota Leo, gracias con esto solucione el problema

Saludos

Etiquetas: Ninguno
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 16:46.