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

consulta entre dos tablas pero que retorne los datos en el mismo registro

Estas en el tema de consulta entre dos tablas pero que retorne los datos en el mismo registro en el foro de PostgreSQL en Foros del Web. hola compañeros tengo un problema que no he podido resolver y queria que por favor alguien me ayude a solucionarlo. tengo que crear unos productos ...
  #1 (permalink)  
Antiguo 07/09/2009, 11:16
 
Fecha de Ingreso: agosto-2009
Mensajes: 5
Antigüedad: 15 años, 3 meses
Puntos: 0
consulta entre dos tablas pero que retorne los datos en el mismo registro

hola compañeros
tengo un problema que no he podido resolver y queria que por favor alguien me ayude a solucionarlo.

tengo que crear unos productos los cuales pueden tener una cantidad x de acabados.para esto tengo 2 tablas una producto y otra acabados_producto, la tabla acabados_productos esta relacionada con la tabla productos por el idproducto.

lo que necesito hacer es consultar los datos del producto pero que en una misma fila me muestre todos los acabados que tiene asociado el producto.

por ejemplo

producto
idproducto descripcion
1 hoja
2 hoja carta

acabados_producto
idacaprod idproducto acabado
1 1 impresa
2 1 coloreada
3 1 arrugada
4 2 coloreada

y pues al realizar la consulta que fuera algo asi
descripcion acabado1 acabado2 acabado3
hoja impresa coloreada arrugada
hoja carta coloreada

pero como la cantidad de acabados que tienen un producto es x entonces no se si esto lo puedo hacer usando un procedimiento almacenado o de que forma podria hacer esto??

Gracias por su colaboracion.
  #2 (permalink)  
Antiguo 07/09/2009, 12:38
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta entre dos tablas pero que retorne los datos en el mismo registro

Requieres algo parecido a la función group_concat de mysql.
Lastimosamente postgresql no la trae, pero según este articulo se puede construir.

Código sql:
Ver original
  1. CREATE aggregate array_accum (
  2. sfunc = array_append,
  3. basetype = anyelement,
  4. stype = anyarray,
  5. initcond = '{}'
  6. );
  7.  
  8. CREATE OR REPLACE FUNCTION _group_concat(text, text)
  9. RETURNS text AS $$
  10. SELECT CASE
  11. WHEN $2 IS NULL THEN $1
  12. WHEN $1 IS NULL THEN $2
  13. ELSE $1 operator(pg_catalog.||) ',' operator(pg_catalog.||) $2
  14. END
  15. $$ IMMUTABLE LANGUAGE SQL;
  16.  
  17. CREATE AGGREGATE group_concat (
  18. BASETYPE = text,
  19. SFUNC = _group_concat,
  20. STYPE = text
  21. );

Después de creada, puedes llamar así tu consulta:

Código sql:
Ver original
  1. SELECT descripcion,group_concat(acabado) AS acabados
  2. FROM producto p
  3. INNER JOIN
  4. acabados_producto ap
  5. ON p.id=ap.id GROUP BY descripcion;

ya la he probado y relamente funciona.

cuentanos si soluciona tu problema
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 07/09/2009, 13:21
 
Fecha de Ingreso: agosto-2009
Mensajes: 5
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: consulta entre dos tablas pero que retorne los datos en el mismo registro

Hola huesos gracias por responder, si como dices la funcion funciona bien, pero en esa funcion lo que hacen es concatener los registros en una sola columna y como yo lo necesito es que salga cada uno en columnas diferentes, por eso decia lo del procedimiento almacenado, pero no se si sea posible realizar lo que necesito, de todas formas voy a seguir intentandolo.

Muchas gracias por tu colaboracion, ademas es un buen aporte por si alguien no sabia como realizar esto.
  #4 (permalink)  
Antiguo 07/09/2009, 15:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: consulta entre dos tablas pero que retorne los datos en el mismo registro

al no saber el total de columnas, no es posible administrar las columnas a mostrar.

Con lo que te doy, tienes un efecto similar.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 08:15.