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

[SOLUCIONADO] Consulta interna con group_concat no hace funcionar consulta externa

Estas en el tema de Consulta interna con group_concat no hace funcionar consulta externa en el foro de Mysql en Foros del Web. Saludo El día de hoy estaba realizando un query, el cual es algo extenso, pero uno de los campos es una subconsulta, la cual a ...
  #1 (permalink)  
Antiguo 08/03/2018, 21:36
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Consulta interna con group_concat no hace funcionar consulta externa

Saludo

El día de hoy estaba realizando un query, el cual es algo extenso,
pero uno de los campos es una subconsulta,
la cual a su vez hace un IN resultado de una consulta que hace GROUP_CONCAT

Código MySQL:
Ver original
  1. (
  2. SELECT GROUP_CONCAT(name) FROM table1 WHERE id IN
  3. ( -- 1,2
  4.     (
  5.         SELECT GROUP_CONCAT(t2.user_receiver_id)
  6.         FROM table2 t2
  7.         WHERE t2.t1_id = t.id
  8.         AND t2.type = 'two'
  9.     )
  10. )
  11. ) user1

Notese que la tabla del campo t.id no esta en este fragmento,
esto es porque la tabla t es de la consulta principal que es más extensa.

Ahora bien, si ejecuto solo el SELECT GROUP_CONCAT interno
(es decir, el que busca en table2) trae bien los resultados que son: 1,2

Hasta aquí no hay problema.
El asunto es cuando se une al SELECT GROUP_CONCAT externo
(es decir, el que busca en table1)
Aquí solo trae un resultado (En este caso, el name del id 1, pero no el 2)

(nombre1)

Si en cambio hago la consulta de este modo

Código MySQL:
Ver original
  1. (
  2. SELECT GROUP_CONCAT(name) FROM table1 WHERE id IN
  3. (
  4. 1,2
  5. )
  6. ) user1

Trae correctamente toda la información.
(nombre1,nombre2)

He intentado agregar el SEPARATOR en el GROUP_CONCAT
pensando que era tema del separador o algo así,
pero persiste el asunto.

¿Alguien tiene otra idea acerca de esto, o debo cambiar algo en el query?

Incluso, si tal vez se les ocurre otra forma de hacerlo que funcione
si es que el tema es restrictivo por algo en particular, lo agradecería.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 08/03/2018 a las 21:59
  #2 (permalink)  
Antiguo 09/03/2018, 09:15
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.
  #3 (permalink)  
Antiguo 09/03/2018, 13:07
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Consulta interna con group_concat no hace funcionar consulta externa

Hola leonardo_josue

Gracias por tu respuesta.
Como bien dices, estructurar una subconsulta que traiga los resultados
sin el GROUP_CONCAT es lo más usado generalmente,
y de hecho, funciona correctamente tu propuesta en cuanto a traer los datos
se refiere si solo fuese esta la consulta principal.

El asunto es que como comentaba inicialmente, esta subconsulta
esta inmersa en una consulta inicial más extensa del cual es uno de los campos.

Adicional a ello, si omitiese el GROUP_CONCAT traería más de un resultado,
dando problemas al query inicial por ese motivo. Es por esto que usando
el GROUP_CONCAT se evita el error de varios registros en la subconsulta.

P.S: Uhm, bueno, seguí haciendo pruebas y tienes razón en la consulta interna,
pero creo que de tantas pruebas que había hecho, había desechado esa idea.

Ahora lo que hice fue quitar en el query interno el GROUP_CONCAT,
y agregar un GROUP BY a la consulta extensa, pues me estaba trayendo datos duplicados.

Seguiré haciendo pruebas, y cuando tenga un veredicto vendré nuevamente.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 09/03/2018 a las 13:13
  #4 (permalink)  
Antiguo 09/03/2018, 15:14
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Consulta interna con group_concat no hace funcionar consulta externa

Pues las pruebas dieron buenos resultados,
exceptuando temas de ordenamiento de datos,
pero temo que eso ya es cuestión de la manera
en que se organiza la info como tal, pero por ahora
con esto que se solventó basta para seguir avanzando.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: campo, externa, funcionar, interna, select, 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 21:05.