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

[SOLUCIONADO] Listar campos Duplicados (Sin Agrupar)

Estas en el tema de Listar campos Duplicados (Sin Agrupar) en el foro de Mysql en Foros del Web. Haber amigos les cuento, tengo una tabla (data_clientes) donde concentre todos los clientes de 15 tiendas para sacar una estadistica... a cada tienda le asigne ...
  #1 (permalink)  
Antiguo 20/06/2013, 09:44
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 4 meses
Puntos: 19
Listar campos Duplicados (Sin Agrupar)

Haber amigos les cuento, tengo una tabla (data_clientes) donde concentre todos los clientes de 15 tiendas para sacar una estadistica...

a cada tienda le asigne un ID (franq_id) luego muestro el cod del cliente (cliente_cod) y sus datos...

Necesito es listar y eliminar los clientes que estan repetidos por Franquicia, es decir:

si el Cliente 02 - Juan esta 2 veces en la franquicia 3, entonces borrarlo, ahora si el cliente 05 - Pedro esta en la Franq 2 y la 5, con ese cliente no me meto...
  #2 (permalink)  
Antiguo 20/06/2013, 11:24
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 21 años, 3 meses
Puntos: 3
Respuesta: Listar campos Duplicados (Sin Agrupar)

Pues agrupa por cliente y franquicia
Código MySQL:
Ver original
  1. select * from clientes
  2. group by cliente_cod, franq_id

Creo que eso es lo que buscas.

Última edición por gnzsoloyo; 20/06/2013 a las 12:11
  #3 (permalink)  
Antiguo 20/06/2013, 12:34
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 4 meses
Puntos: 19
Respuesta: Listar campos Duplicados (Sin Agrupar)

Pero no me mostrara los items repetidos...
  #4 (permalink)  
Antiguo 21/06/2013, 08:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Listar campos Duplicados (Sin Agrupar)

Hola JuJoGuAl:

Vayamos por partes... por un lado hablas de MOSTRAR y por otro lado hablas de BORRAR, son dos cosas muy distintas, veamos si entendí tu problema...

Supongamos que tienes esta información en tu tabla:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+----------+----------------+
  3. | id   | franq_id | cliente_nombre |
  4. +------+----------+----------------+
  5. |    1 |        3 | Juan           |
  6. |    2 |        3 | Pedro          |
  7. |    3 |        3 | Juan           |
  8. |    4 |        5 | Juan           |
  9. |    5 |        5 | Pedro          |
  10. +------+----------+----------------+
  11. 5 rows in set (0.00 sec)

Estos serían los datos que pones de ejemplo... el cliente JUAN aparece tres veces en la tabla, dos veces con la franquicia 3 y 1 vez con la franquicia 5... En este caso el cliente JUAN SI ESTÁ DUPLICADO, EN LA FRANQUICIA 3.

Por otro lado, el cliente PEDRO aparece 2 veces, pero en distintas franquicias, por lo tanto NO ESTÁ DUPLICADO, correcto???

para detectar los casos duplicados puedes hacerlo con un HAVING COUNT(), así:

Código MySQL:
Ver original
  1. mysql> SELECT franq_id, cliente_nombre, COUNT(*) total
  2.     -> FROM tabla
  3.     -> GROUP BY franq_id, cliente_nombre HAVING COUNT(*) > 1;
  4. +----------+----------------+-------+
  5. | franq_id | cliente_nombre | total |
  6. +----------+----------------+-------+
  7. |        3 | Juan           |     2 |
  8. +----------+----------------+-------+
  9. 1 row in set (0.00 sec)

Esta consulta te muestra el registro duplicado y el número de veces que está duplicado... ahora bien, observa que para el ejemplo estoy colocando un campo ID para distinguir ambos registros, si tu idea es mostrar toda la información del cliente además de la franquicia y el nombre, podrías hacerlo con una subconsulta:

Código MySQL:
Ver original
  1. mysql> SELECT T1.* FROM tabla T1
  2.     -> INNER JOIN
  3.     -> (  SELECT franq_id, cliente_nombre
  4.     ->    FROM tabla
  5.     ->    GROUP BY franq_id, cliente_nombre HAVING COUNT(*) > 1) T2
  6.     -> ON T1.franq_id = T2.franq_id AND T1.cliente_nombre = T2.cliente_nombre;
  7. +------+----------+----------------+
  8. | id   | franq_id | cliente_nombre |
  9. +------+----------+----------------+
  10. |    1 |        3 | Juan           |
  11. |    3 |        3 | Juan           |
  12. +------+----------+----------------+
  13. 2 rows in set (0.00 sec)

Ahora bien, para la parte de la eliminación, bueno, esta puede ser un poco más compleja, dependiendo de cómo tienes tu información completa... usualmente lo que haces es:

1. Crear una tabla temporal haciendo una consulta como la que propone Gedeon, es decir, donde no se muestren los registros,

2. Eliminar la tabla original

3. Renombrar la tabla temporal como la tabla original.

Hay muchas otras formas para hacer la eliminación de duplicados, pero insisto eso depende en gran medida de cómo tienes exactamente tu información...

Saludos
Leo.
  #5 (permalink)  
Antiguo 25/06/2013, 09:51
Avatar de JuJoGuAl  
Fecha de Ingreso: julio-2009
Ubicación: Venezuela
Mensajes: 754
Antigüedad: 15 años, 4 meses
Puntos: 19
Respuesta: Listar campos Duplicados (Sin Agrupar)

Hoy probe la consulta de esta manera:
Código MySQL:
Ver original
  1. SELECT T1.* FROM data_clientes T1
  2.     (SELECT id_franq, clientes_cod
  3.     FROM data_clientes
  4.         GROUP BY id_franq, clientes_cod HAVING COUNT(*) > 1) T2
  5. ON T1.id_franq = T2.id_franq AND T1.clientes_cod = T2.clientes_cod LIMIT 30

puesto que si quito el LIMIT tarda HORAS en responder la consulta...

Es Exactamente lo que buscaba, MUCHAS GRACIAS

Etiquetas: campos, duplicados, 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 22:31.