Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/03/2018, 09:15
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: Consulta interna con group_concat no hace funcionar consulta externa

Hola mortiprogramador:

Cuando haces una comparación tipo IN con una subconsulta, NO ES NECESARIO QUE UTILICES LA FUNCIÓN DE AGRUPACIÓN GROUP_CONCAT, simplemente tienes que hacer que la subconsulta te regrese como un conjunto te registros TODOS LOS ID'S QUE QUIERES COMPARARAR:

Va un ejemplo para ver si queda más claro:

imagina que tienes estas dos tablas;

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla_a;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    1 | one         |
  7. |    1 | un          |
  8. |    2 | dos         |
  9. |    2 | two         |
  10. |    2 | deux        |
  11. +------+-------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM tabla_b;
  15. +------+-------------+
  16. | id   | descripcion |
  17. +------+-------------+
  18. |    1 | uno         |
  19. |    2 | dos         |
  20. +------+-------------+
  21. 2 rows in set (0.00 sec)

Supongamos que quieres extraer de la tabla A sólo las descripciones en español (uno y dos), esto lo puedes hacer de dos formas:

1. con la sentencia IN listando todos los valores separados por comas;

Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM tabla_a
  3.     -> WHERE descripcion in ('uno', 'dos');
  4. +------+-------------+
  5. | id   | descripcion |
  6. +------+-------------+
  7. |    1 | uno         |
  8. |    2 | dos         |
  9. +------+-------------+
  10. 2 rows in set (0.06 sec)

2. con una SUBCONSULTA a la tabla B:

Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM tabla_a
  3.     -> WHERE descripcion IN ( SELECT descripcion
  4.     ->                        FROM tabla_b
  5.     ->                      );
  6. +------+-------------+
  7. | id   | descripcion |
  8. +------+-------------+
  9. |    1 | uno         |
  10. |    2 | dos         |
  11. +------+-------------+
  12. 2 rows in set (0.00 sec)

OBSERVA que en la subconsulta NO ESTOY UTILIZANDO EL GROUP_CONCAT:

Código MySQL:
Ver original
  1. mysql> SELECT descripcion
  2.     -> FROM tabla_b;
  3. +-------------+
  4. | descripcion |
  5. +-------------+
  6. | uno         |
  7. | dos         |
  8. +-------------+
  9. 2 rows in set (0.00 sec)

¿Se entiende? Lo único que debes de asegurarte es que la subconsulta te regrese UNA SOLA COLUMNA.

Haz la prueba y nos comentas.

Saludos
Leo.