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

[SOLUCIONADO] Como consultar con tablas intermedias

Estas en el tema de Como consultar con tablas intermedias en el foro de Mysql en Foros del Web. Hola buen día, quería que vosotros me pudierais ayudar en un problema que tengo al momento de realizar una consulta con tablas intermedias. primero, nombre ...
  #1 (permalink)  
Antiguo 11/04/2016, 23:51
 
Fecha de Ingreso: junio-2013
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Como consultar con tablas intermedias

Hola buen día, quería que vosotros me pudierais ayudar en un problema que tengo al momento de realizar una consulta con tablas intermedias.

primero, nombre de tablas.

tbl_clientes
campos: id, nombre
tbl_articles
campos:id, nombre
tbl_articles_has_tbl_clientes
campos: tbl_articles_id, tbl_clientes_id

segundo, consulta realizada
Código MySQL:
Ver original
  1. FROM encuestas.tbl_clientes E
  2. INNER JOIN encuestas.tbl_articles C
  3. INNER JOIN encuestas.tbl_articles_has_tbl_clientes R ON E.id = R.tbl_clientes_id AND C.id = R.tbl_articles_id

tercero, resultado de la prueba
Código:
--------------------------------------------
id  | nombre cliente| nombre articulo 
1      pepito perez       cuaderno
1      Pepito perez        lapiz
1      pepito perez        libros
entiendo que por cada articulo que encuentre relacionado con el cliente va a mostrar un resultado por eso aparecen pepito perez repetido pero como hacer para que quede

id | nombre cliente | nombre articulo
1 | pepito perez | cuaderno, lapiz, libros

Agradezco vuestra ayuda. gracias

Última edición por gnzsoloyo; 12/04/2016 a las 10:47
  #2 (permalink)  
Antiguo 12/04/2016, 03:37
 
Fecha de Ingreso: abril-2016
Ubicación: C:\Usuarios\isaac
Mensajes: 33
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: Como consultar con tablas intermedias

buenas! he investigado un poco y creo haber encontrado una solución. te dejo un link del ejemplo en cuestión y ya comentas que tal te ha ido:

https://donnierock.com/2014/03/19/concatenar-varios-valores-de-la-misma-columna-en-una-sola-celda-en-sql-server/

Espero que te sirva, un saludo y suerte!
__________________
"He intentado cambiar el mundo, pero no he encontrado el código fuente"
  #3 (permalink)  
Antiguo 12/04/2016, 03:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consultar con tablas intermedias

Isaac : Esa es una solución para SQL Server, No para MySQL.
En MySQL simplemente se usa la cláusula GROUP_CONCAT ()
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/04/2016, 10:32
 
Fecha de Ingreso: junio-2013
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como consultar con tablas intermedias

Gracias a todos vosotros que miraron este tema; pero doy mis felicitaciones a gnzsoloyo que dio justo con lo que necesitaba

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Isaac : Esa es una solución para SQL Server, No para MySQL.
En MySQL simplemente se usa la cláusula GROUP_CONCAT ()
dejaré el código por si alguna persona necesita de esta solución

Código MySQL:
Ver original
  1. SELECT E.nombre_razon, GROUP_CONCAT(distinct C.articles_name SEPARATOR ';') as article
  2.                         FROM encuestas.tbl_clientes E
  3.                         INNER JOIN encuestas.tbl_articles C
  4.                         INNER JOIN encuestas.tbl_articles_has_tbl_clientes R ON E.id = R.tbl_clientes_id AND C.id = R.tbl_articles_id
  5.                         GROUP BY E.id

Una última pregunta la función group_concat tiene algún limite? leí un poco sobre el tema y especifican que tiene una restricción de 1024 caracteres.

Nuevamente gracias a todos

Última edición por gnzsoloyo; 12/04/2016 a las 10:41
  #5 (permalink)  
Antiguo 12/04/2016, 10:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consultar con tablas intermedias

Exactamente. Tiene un límite, que puedes ver en el manual de referencia:
Cita:
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer:
Código SQL:
Ver original
  1. SET [GLOBAL | SESSION] group_concat_max_len = val;

The return value is a nonbinary or binary string, depending on whether the arguments are nonbinary or binary strings. The result type is TEXT or BLOB unless group_concat_max_len is less than or equal to 512, in which case the result type is VARCHAR or VARBINARY.
Tambien peudes usar para este fin la función CONCAT_WS().
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 12/04/2016, 17:32
 
Fecha de Ingreso: junio-2013
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como consultar con tablas intermedias

Que pena volver a preguntar pero no pude con este problema, supuse un caso que puede darse y es cuando la tercera tabla se encuentra vacía; lógicamente me mostrará un resultado como null como hacer para que me muestre por lo menos los datos del cliente es decir:

Esta consulta si en la tabla tbl_articles_has_tbl_clientes no hay datos simplemente me envia null de datos

Código MySQL:
Ver original
  1. SELECT *, GROUP_CONCAT(distinct C.articles_name SEPARATOR ';') as article
  2.                         FROM encuestas.tbl_clientes E
  3.                         INNER JOIN tbl_empleado employee
  4.                         ON E.tbl_empleado_id = employee.id
  5.                         INNER JOIN tbl_tipo_cliente tipo_cliente
  6.                         ON E.tbl_tipo_cliente_id = tipo_cliente.id
  7.                         INNER JOIN encuestas.tbl_articles C
  8.                         LEFT JOIN encuestas.tbl_articles_has_tbl_clientes R ON E.id = R.tbl_clientes_id AND C.id = R.tbl_articles_id
  9.                         GROUP BY E.id

debe enviar por lo menos los datos del cliente

Última edición por gnzsoloyo; 12/04/2016 a las 17:58
  #7 (permalink)  
Antiguo 12/04/2016, 18:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como consultar con tablas intermedias

Cita:
Esta consulta si en la tabla tbl_articles_has_tbl_clientes no hay datos simplemente me envia null de datos
Eso es porque un NULL no es un dato. Es un estado de indefinición, y al no ser un dato no se puede concatenar.
Además, es un estado que anula todo. Por eso, toda suma, resta, multiplicación, producto, división y concatenación entre cualquier valor y NULL da por resultado... NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 12/04/2016, 18:07
 
Fecha de Ingreso: junio-2013
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Como consultar con tablas intermedias

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso es porque un NULL no es un dato. Es un estado de indefinición, y al no ser un dato no se puede concatenar.
Además, es un estado que anula todo. Por eso, toda suma, resta, multiplicación, producto, división y concatenación entre cualquier valor y NULL da por resultado... NULL.
Gracias gnzoloyo por responder, sabes bastante de sql y es una de mis debilidades; logré encontrar la solución o eso creo. Envío el código para que otra persona que lo este buscando pueda agregarlo al proyecto

Código MySQL:
Ver original
  1. SELECT E.nombre_razon , GROUP_CONCAT(distinct C.articles_name SEPARATOR ';')  as article
  2. FROM encuestas.tbl_articles_has_tbl_clientes R
  3. inner JOIN encuestas.tbl_clientes E
  4. left JOIN encuestas.tbl_articles C ON C.id = R.tbl_articles_id AND E.id = R.tbl_clientes_id
  5. group by E.id;
  #9 (permalink)  
Antiguo 12/04/2016, 21:39
 
Fecha de Ingreso: junio-2013
Mensajes: 7
Antigüedad: 10 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Como consultar con tablas intermedias

Doy cerrado el tema, gracias a todos

Etiquetas: campo, consultar, join, select, tabla, tablas
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 22:40.