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

Problema con select dentro de otro

Estas en el tema de Problema con select dentro de otro en el foro de Mysql en Foros del Web. Hola. Tengo un pequeño problema con una consulta que deseo realizar. Resulta que tengo una tabla llamada encabezado_guia_servicio y otra llamada cuerpo_guia_servicio. Ambas estan relacionadas ...
  #1 (permalink)  
Antiguo 03/12/2009, 23:47
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Problema con select dentro de otro

Hola.
Tengo un pequeño problema con una consulta que deseo realizar. Resulta que tengo una tabla llamada encabezado_guia_servicio y otra llamada cuerpo_guia_servicio. Ambas estan relacionadas por medio del campo en comun "numero_guia_servicio".
Resulta que el cuerpo_guia_servicio tiene dos PK (numero_guia_servicio y numero_linea) Asi puedo agregar varias lineas asociadas a un numero de guia sin incovenientes.
Lo que deseo hacer es poder mostrar en una fila todo los parametros de ambas tabla encabezado_guia_servicio y cuerpo_guia_servicio en una sola "fila" por ello estoy tratando de hacer un select "anidado" pero, me rroja e l siguiente error la consulta que trato de hacer: operand should contain 1 columns

Aqui mi consulta:

Código PHP:
SELECT
eg
.numero_guia_servicio,
eg.fecha_guiarut_cliente,
eg.guia_5081id_contrato_cliente,
re.descripcion_relleno_sanitario,
eg.numero_ticket_relleno,
est.descripcion_estado_guia,
(
SELECT  numero_lineacantidadvolumen FROM cuerpo_guia_servicio cg WHERE cg.numero_guia_servicio eg.numero_guia_servicio )

FROM encabezado_guia_servicio eg
JOIN relleno_sanitario re USING 
(id_relleno_sanitario)
JOIN estado_guia_servicio est USING (id_estado_guia
En que estoy mal

Gracias!!!
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"

Última edición por Capote; 03/12/2009 a las 23:54
  #2 (permalink)  
Antiguo 04/12/2009, 03:37
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, 4 meses
Puntos: 2658
Respuesta: Problema con select dentro de otro

Un SELECT puesto dentro del conjunto de columnas de otro SELECT, debe devolver una única columna, porque representa a una columna.
Si quieres que devuelva más, debes hacer un JOIN entre las dos tablas.
Código sql:
Ver original
  1. SELECT
  2.     eg.numero_guia_servicio,
  3.     eg.fecha_guia, rut_cliente,
  4.     eg.guia_5081, id_contrato_cliente,
  5.     re.descripcion_relleno_sanitario,
  6.     eg.numero_ticket_relleno,
  7.     est.descripcion_estado_guia,
  8.     cg.numero_linea, cantidad,
  9.     cg.volumen
  10. FROM encabezado_guia_servicio eg
  11.     JOIN relleno_sanitario re USING (id_relleno_sanitario)
  12.     JOIN estado_guia_servicio est USING (id_estado_guia)  
  13.     JOIN cuerpo_guia_servicio cg USING(numero_guia_servicio)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/12/2009, 09:29
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con select dentro de otro

Hola.
Si lo habia probado de esa forma la consulta pero no es como quiero mostrar mis resultados.
Haber voy ah tratar de ser mas claro.
En mi cuerpo_hoja_ruta tengo los siguientes campos:

numero_guia_servicio,numero_linea, cantidad, volumen

Yo cuando hago un selec como el que me comentas me arroja lo siguiente:

Parametro1,Parametro2,PArametroN..........Linea... ..Cantidad......Volumen
xxxxxxxxxx...xxxxxxxxx....xxxxxxxxxN............1. ...............2.................10
idem..............idem..............idem.......... ..........2................10................20
ideem............idem..............idem........... .........3.................20................12


De la manera anterior me repite todos los valores de la tabla encabezado y que estan bien pues pertenecen al mismo numero de guia (osea estan dentro de esa guia) pero la idea es que la consulta no me arroje N filas por cada linea, sino que todo dentro de la misma fila, seria algo asi:

Parametro1,Parametro2,ParametroN........Linea...Ca ntidad..Volumen..Linea...Cantida..Volumen..LineaN
xxxxxxx.....xxxx.xxx..........xxxxxxxx..........1. ...............2...........10..........2.........3 .........20..............N....

Ojala se me entienda lo quetrate de explicar.

Pd. Parametro1, parametro2 hacen referencia a lo que consulto de la tabla encabezado_guia y como son varios puse parametro.
Saludos!
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"
  #4 (permalink)  
Antiguo 04/12/2009, 09:53
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, 4 meses
Puntos: 2658
Respuesta: Problema con select dentro de otro

Si, se entiende, pero lamentablemente eso no se hace por medio de consultas, sino por medio de las aplicaciones.

En esencia estás queriendo convertir cada línea devuelta en la subconsulta en dos columnas.... Ese tipo de reportes (que usan una funcionalidad que no pertenece al SQL denominada en SQL Server PIVOT), son los que se hacen cuando se usa OLAP, pero en ese caso hay un límite dado a la cantidad de columnas devueltas (que generalmente es un numero fijo), por lo que se puede hacer una rutina que te lo realice.
Este no es el caso. Lo que estás proponiendo es una consulta que te lo devuelva creando las columnas en forma dinámica, y eso no se puede realizar, porque eventualmente se generaría un loop infinito (el algoritmo no se puede planear), o como minino excederías la cantidad de columnas admisibles por tabla...
Una solución alternativa requiere de realizar una consulta por cada item que se requiera, pero esto hace que la consulta también deba construirse dinámicamente, o bien que se conozca de antemano la cantidad de columnas a usar... con lo que caemos en el caso anterior.

Aquí tienes un caso de resolución: MySQL/Pivot table

No creo que le encuentres una solución que te sirva sin utilizar programación de aplicaciones.

No es la primera vez que alguno consulta por un caso así. Cada tanto tiempo aparece alguien
con esta duda, y hasta ahora no ha habido una solución satisfactoria.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/12/2009, 10:51
Avatar de Capote  
Fecha de Ingreso: julio-2007
Ubicación: C h i l e
Mensajes: 136
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema con select dentro de otro

Gracias por la aclaración, pense que ah nivel de mysql, era posible por medio de una consulta realizar lo que pretendia.
Y claro, estoy trabajando con PHP y con programación lo estoy tratando de solucionar.

Gracias!
__________________
"La blanda respuesta quita la ira, Mas la palabra áspera hace subir el furor"
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 13:16.