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

registros con campo diferente

Estas en el tema de registros con campo diferente en el foro de Mysql en Foros del Web. hola como les va? A mi no tan bien, estoy tratando de hacer una consulta pero no me doy idea de que instrucciones usar, veran ...
  #1 (permalink)  
Antiguo 26/07/2013, 10:17
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
registros con campo diferente

hola como les va?

A mi no tan bien, estoy tratando de hacer una consulta pero no me doy idea de que instrucciones usar, veran tengo por ejemplo la siguiente tabla:

+----------+
tabla
+----------+
no_usu
usuario
mes
clave

+----------+

se supone que cada mes se renueva la informacion de los usuarios, que en teoria deberian tener siempre la misma clave, pero ya sabemos que siempre hay fallos en el manejo de datos etc aveces muy ajenos a nosotros, entonces por cuestiones diversas se puede dar el caso que haya un mismo usuario con diferente clave.

mi tarea es sacar un reporte con esos usuarios que tienen claves diferentes, por ejemplo la siguiente info:

Código:
no_usu	usuario       mes	clave
USU01	trollencio	ene	1
USU01	trollencio	feb	1
USU02	fukencia	ene	2
USU02	fukencia	feb	2
USU02	fukencia	ene	5
USU02	fukencia	feb	5

tenemos a la usuario fukencia que esta apareciendo 2 veces cada mes debido a que esta teniendo la clave 2 y 5

investigue pero no logro estructurar la consulta

como podria hacer la consulta que me dijera todos los usuarios que tienen mas de una clave y mostrar por ejemplo algo asi:

Código:
no_usu	usuario	      clave
USU02	fukencia	2
USU02	fukencia	5
...
gracias de antemano
  #2 (permalink)  
Antiguo 26/07/2013, 11:39
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: registros con campo diferente

Creo que ya lo tengo!!

primero necesito agrupar a los usuarios por su clave:

Código MySQL:
Ver original
  1. SELECT no_usu, clave
  2. FROM tabla
  3. GROUP BY clave

Código:
no_usu   clave
USU01	1
USU02	2
USU02	5
ahora necesito ver en la columna no_usu cuantos se duplican:

Código MySQL:
Ver original
  1. SELECT no_usu, COUNT(*) no_claves
  2. FROM (SELECT no_usu, clave FROM tabla GROUP BY clave) AS tb
  3. GROUP BY no_usu
  4. HAVING no_claves > 1

mi salida
Código:
no_usu   no_claves
USU02	 2
Eso es!

porfas si estoy mal en algo, o hay alguna mejor forma de hacerlo, comentenmelo

gracias!
  #3 (permalink)  
Antiguo 26/07/2013, 12:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: registros con campo diferente

Hola catpaw:

En tu post colocas esto:

Cita:
En teoria deberian tener siempre la misma clave, pero ya sabemos que siempre hay fallos en el manejo de datos etc aveces muy ajenos a nosotros, entonces por cuestiones diversas se puede dar el caso que haya un mismo usuario con diferente clave.
Esto no es teoría, así debe ser SIEMPRE... el que hables de "fallos" en el manejo de los datos es una cosa terrible, y no debería suceder... en lugar de tratar de hacer consultas para tratar de corregir la información deberías ir a fondo y evitarlos desde un inicio... un buen modelo de BD debe evitar este tipo de acciones... Para tal efecto te puedes valer de la implementación de elementos como TRIGGERS o PROCEDIMIENTOS ALMACENADOS, para evitar que se dupliquen usuarios con claves distintas. Ojo con eso.

Ahora bien, con respecto a tu pregunta, en realidad no hay necesidad de hacer uan subconsulta y agrupar dos veces... lo puedes hacer desde el primer SELECT, es decir, hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+------------+------+-------+
  3. | no_usu | usuario    | mes  | clave |
  4. +--------+------------+------+-------+
  5. | USU01  | trollencio | ene  |     1 |
  6. | USU01  | trollencio | feb  |     1 |
  7. | USU02  | fukencia   | ene  |     2 |
  8. | USU02  | fukencia   | feb  |     2 |
  9. | USU02  | fukencia   | ene  |     5 |
  10. | USU02  | fukencia   | feb  |     5 |
  11. +--------+------------+------+-------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT usuario, COUNT(DISTINCT clave) total
  15.     -> FROM tabla
  16.     -> GROUP BY usuario
  17.     -> HAVING total > 1;
  18. +----------+-------+
  19. | usuario  | total |
  20. +----------+-------+
  21. | fukencia |     2 |
  22. +----------+-------+
  23. 1 row in set (0.03 sec)

El resultado es el mismo y la consulta es más simple.

Haz la prueba para ver si esto es lo que necesitas.

Saludos
Leo.
  #4 (permalink)  
Antiguo 29/07/2013, 07:28
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: registros con campo diferente

hola leo,

muy cierto lo que me comentas

Cita:
en lugar de tratar de hacer consultas para tratar de corregir la información deberías ir a fondo y evitarlos desde un inicio... un buen modelo de BD debe evitar este tipo de acciones
mi problema es que es otra area la que se encarga de la fuente de datos, nosotros solo importamos esa información y tratamos de depurarla de la mejor manera para los fines de nuestra area, es un poco complicado, pero si dependiera de mi, cuidaria esos aspectos que me comentas.

Gracias por tu observación y la consulta va muy bien, más simple.
  #5 (permalink)  
Antiguo 29/07/2013, 09:44
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: registros con campo diferente

aprovechando el hilo,


y si quisiera mostrar tambien, ademas de quien y cuantas claves diferentes tiene:

Código:
+----------+-------+
| usuario  | total |
+----------+-------+
| fukencia |     2 |
+----------+-------+
todos los datos de los usuarios con mas de una clave, sin agruparlos?

Recordemos que tenemos estos datos de ejemplo:

Código:
no_usu	usuario       mes	clave
USU01	trollencio	ene	1
USU01	trollencio	feb	1
USU02	fukencia	ene	2
USU02	fukencia	feb	2
USU02	fukencia	ene	5
USU02	fukencia	feb	5
quisiera obtener solo los que tengan mas de una clave SIN AGRUPAR, entonces solo:

Código:
no_usu	usuario       mes	clave
USU02	fukencia	ene	2
USU02	fukencia	feb	2
USU02	fukencia	ene	5
USU02	fukencia	feb	5


gracias

Última edición por catpaw; 29/07/2013 a las 09:55
  #6 (permalink)  
Antiguo 29/07/2013, 10:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: registros con campo diferente

Hola catpaw:

Muchas veces hemos respondido este tipo de preguntas... te sugiero que para la próxima, antes de publicar una nueva pregunta, te tomes un tiempo para buscar si ya se publicó algo que te pueda servir a responder tu problema... Ojo con eso.

Hay muchas formas para obtener lo que quieres... una de las más utilizadas es el uso de JOIN's con una subconsulta, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT T1.* FROM tabla T1;
  2. +--------+------------+------+-------+
  3. | no_usu | usuario    | mes  | clave |
  4. +--------+------------+------+-------+
  5. | USU01  | trollencio | ene  |     1 |
  6. | USU01  | trollencio | feb  |     1 |
  7. | USU02  | fukencia   | ene  |     2 |
  8. | USU02  | fukencia   | feb  |     2 |
  9. | USU02  | fukencia   | ene  |     5 |
  10. | USU02  | fukencia   | feb  |     5 |
  11. +--------+------------+------+-------+
  12. 6 rows in set (0.04 sec)
  13.  
  14. mysql> SELECT T1.* FROM tabla T1
  15.     -> INNER JOIN (
  16.     ->    SELECT usuario, COUNT(DISTINCT clave) total
  17.     ->    FROM tabla
  18.     ->    GROUP BY usuario
  19.     ->    HAVING total > 1) T2 ON T1.usuario = T2.usuario;
  20. +--------+----------+------+-------+
  21. | no_usu | usuario  | mes  | clave |
  22. +--------+----------+------+-------+
  23. | USU02  | fukencia | ene  |     2 |
  24. | USU02  | fukencia | feb  |     2 |
  25. | USU02  | fukencia | ene  |     5 |
  26. | USU02  | fukencia | feb  |     5 |
  27. +--------+----------+------+-------+
  28. 4 rows in set (0.01 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
  #7 (permalink)  
Antiguo 29/07/2013, 11:25
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: registros con campo diferente

hola leo, de nuevo mil gracias

funciona ok la consulta

disculpa, si mi tema fue trillado, siempre busco antes de publicar, solo que esta vez me costo describir/plantear la busqueda y no obtuve los resultados que esperaba, igual me costo describir mi problematica de hecho si te das cuenta alguna de mi respuesta tiene ediciones ya que no me quedaba claro mi tema

pero al final salio gracias

Etiquetas: campo, diferente, registros, 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 07:22.