Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/11/2017, 09:21
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Consulta Select "compleja"

Hola Bacc:

Tal como tienes tu consulta, es imposible que te arroje resultados, ya que al utilizar sólo el operador AND estás poniendo el equivalente a decir que quieres una camisa negra que al mismo tiempo sea blanca

por lo tanto, es necesario que utilices el operador OR, pero con un pequeño "truco" veamos el ejemplo. Supongamos que tienes esta tabla;

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

entonces, si utilizamos el operador OR, tenemos esto:

Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM tabla
  3.     -> WHERE
  4.     -> (id_informatica = 1 AND nivel >= 2)
  5.     -> OR
  6.     -> (id_informatica = 9 AND nivel >= 1);
  7. +------+----------+----------------+-------+
  8. | id   | id_padre | id_informatica | nivel |
  9. +------+----------+----------------+-------+
  10. |    1 |        3 |              1 |     3 |
  11. |    2 |        3 |              9 |     3 |
  12. |    3 |        4 |              1 |     3 |
  13. |    4 |        5 |              9 |     3 |
  14. +------+----------+----------------+-------+
  15. 4 rows in set (0.03 sec)

ya que los id's 5 y 6 no tienen los id_informática 1 y 9 que te interesan... sin embargo, el ID 4 y el ID 5 sólo tienen uno cada uno de ellos...

¿Qué pasaría si haces un COUNT() de las veces que aparece el id_padre en esta lista?, resultaría que para el ID=3 el COUNT sería = 2, mientras que para los ID's 4 y 5 sería de 1 cierto?

LUEGO ENTONCES, puedes utilizar FILTRAR este COUNT para que sólo te muestre aquellos que tienen un COUNT() = 2. (recuerda que para filtrar un COUNT utilizas la cláusula HAVING).

Haz la prueba y nos comentas.

Saludos
Leo.