Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/04/2012, 15:01
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Consulta a tabla de relaciones mysql

Hola Dattar:

Veo que este es el primer mensaje que publicas, así es que antes que nada, Bienvenido al foro.

La consulta que planteas es típica en SQL, por lo que estoy seguro que podrías haber encontrado algún otro foro con una respuesta que te ayudara a resolverla... San Google también tiene muchas respuestas, sólo hay que saber preguntar .

Pasando a tu problema. Una manera de resolver esta consulta es con el operador COUNT() y la cláusula HAVING... checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM leyes;
  2. +--------+------------+
  3. | ley_id | ley_nombre |
  4. +--------+------------+
  5. |      1 | Ley1       |
  6. |      2 | Ley2       |
  7. +--------+------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM relacion;
  11. +--------+------------+
  12. | voz_id | voz_ley_id |
  13. +--------+------------+
  14. |      1 |          1 |
  15. |      2 |          1 |
  16. |      3 |          1 |
  17. |      1 |          2 |
  18. |      2 |          2 |
  19. +--------+------------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM leyes L INNER JOIN (
  23.     -> SELECT voz_ley_id, COUNT(voz_ley_id)
  24.     -> FROM relacion WHERE voz_id IN (1,2)
  25.     -> GROUP BY voz_ley_id
  26.     -> HAVING COUNT(voz_ley_id) >= 2
  27.     -> ) T ON L.ley_id = T.voz_ley_id;
  28. +--------+------------+------------+-------------------+
  29. | ley_id | ley_nombre | voz_ley_id | COUNT(voz_ley_id) |
  30. +--------+------------+------------+-------------------+
  31. |      1 | Ley1       |          1 |                 2 |
  32. |      2 | Ley2       |          2 |                 2 |
  33. +--------+------------+------------+-------------------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> SELECT * FROM leyes L INNER JOIN (
  37.     -> SELECT voz_ley_id, COUNT(voz_ley_id)
  38.     -> FROM relacion WHERE voz_id IN (1,2,3)
  39.     -> GROUP BY voz_ley_id
  40.     -> HAVING COUNT(voz_ley_id) >= 3
  41.     -> ) T ON L.ley_id = T.voz_ley_id;
  42. +--------+------------+------------+-------------------+
  43. | ley_id | ley_nombre | voz_ley_id | COUNT(voz_ley_id) |
  44. +--------+------------+------------+-------------------+
  45. |      1 | Ley1       |          1 |                 3 |
  46. +--------+------------+------------+-------------------+
  47. 1 row in set (0.05 sec)

La única diferencia entre las consultas es el contenido que se pone en el operador IN y el valor para comparar en el HAVING, En el primer caso se consideran sólo las voces 1 y 2, mientras que en la segunda consulta se incluye también la voz 3... dale un vistazo y si tienes alguna duda lo comentas en el foro.

Saludos
Leo.