Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/07/2011, 10:40
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Obtener registros con mismo valor en columna pero diferente en otra

Hola de nuevo harryp:

Me alegro que la consulta del compañero gnzsoloyo te haya servido para resolver tu problema. Con respecto a mi propuesta, bueno, desde el momento que cambias el contexto de los datos originales pues es posible que no te ayude, soy informático, no divino jejeje... Sin embargo podrías utilizar la misma idea con una pequeña variación. Checa esto:

Código MySQL:
Ver original
  1. mysql> insert into lloc values (1,1,'A'),(1,2,'A'),
  2.     -> (1,3,'A'),(1,3,'B'),(2,1,'A'),(2,2,'A'),(3,1,'A');
  3. Query OK, 7 rows affected (0.04 sec)
  4. Records: 7  Duplicates: 0  Warnings: 0
  5.  
  6. mysql> select * from lloc;
  7. +---------+---------+---------+
  8. | id_lloc | n_tarea | campo_x |
  9. +---------+---------+---------+
  10. |       1 |       1 | A       |
  11. |       1 |       2 | A       |
  12. |       1 |       3 | A       |
  13. |       1 |       3 | B       |
  14. |       2 |       1 | A       |
  15. |       2 |       2 | A       |
  16. |       3 |       1 | A       |
  17. +---------+---------+---------+
  18. 7 rows in set (0.00 sec)
  19.  
  20. mysql> #consulta propuesta 1
  21. mysql> SELECT n_tarea FROM lloc
  22.     -> WHERE id_lloc IN (1,2) GROUP BY n_tarea HAVING COUNT(*) = 2;
  23. +---------+
  24. | n_tarea |
  25. +---------+
  26. |       1 |
  27. |       2 |
  28. |       3 |
  29. +---------+
  30. 3 rows in set (0.00 sec)
  31.  
  32. mysql> #consulta propuesta 2
  33. mysql> SELECT n_tarea FROM lloc
  34.     -> WHERE id_lloc IN (1,2) GROUP BY n_tarea
  35.     -> HAVING COUNT(DISTINCT n_tarea, id_lloc) = 2;
  36. +---------+
  37. | n_tarea |
  38. +---------+
  39. |       1 |
  40. |       2 |
  41. +---------+
  42. 2 rows in set (0.00 sec)

Si observas, efectivamente con la propuesta 1 aparece también la n_tarea 3, pero haciendo una modificación a la función COUNT agregando una condición DISTINCT arroja nuevamente los resultados deseados.

No estoy seguro si esta propuesta o la del compalero gnzsoloyo es más eficiente pues como dice acertadamente en su comentario la lógica es completamente diferente, sería cuestión de que probaras y nos comentaras, pero bueno, al menos te ofrece otro panorama de cómo puedes hacer ciertas cosas.

Saludos
Leo