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

Mostrar relacion muchos a muchos

Estas en el tema de Mostrar relacion muchos a muchos en el foro de Oracle en Foros del Web. Hola amigos, mi duda es la siguiente, tengo una relación muchos a muchos con las siguientes tablas: AUTOR, OBJETO y AUTOR_OBJETO. estoy intentando hacer una ...
  #1 (permalink)  
Antiguo 20/10/2010, 10:39
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 14 años, 7 meses
Puntos: 0
Mostrar relacion muchos a muchos

Hola amigos, mi duda es la siguiente, tengo una relación muchos a muchos con las siguientes tablas: AUTOR, OBJETO y AUTOR_OBJETO.

estoy intentando hacer una consulta donde me muestre unos campos k necesito, uno de estos campos es el nombre del autor de la tabla autor, en caso de k un objeto tuviese un autor bien , pero cuando tiene dos o mas autores, me muestra varias filas solo con la diferencia de k en cada fila tiene un autor diferente.

si yo kisiera k solo me mostrara un fila (pork solo consulto un objeto), pero k en el campo autor me mostrara los autores k estna relacionados, sean uno o mas, como seria?

mi consulta aes la siguiente
Código:
SELECT o.idobjeto, o.nombre, i.nombre, a.nombre, ao.fecha, f.nombre || ', ' || f.extencion "Formato"
FROM objeto o
JOIN autor_objeto ao ON (o.idobjeto=ao.objetoid)
JOIN autor a ON (a.idautor=ao.autorid)
JOIN formato f ON (o.formato_id=f.idformato)
JOIN idioma i ON (o.idioma_id=i.ididioma) where o.idobjeto=5001;
gracias de antemanos

Última edición por rocka8613; 20/10/2010 a las 11:12
  #2 (permalink)  
Antiguo 21/10/2010, 08:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Mostrar relacion muchos a muchos

Buenos días rocka8613:

Hasta ahora no encontrado otra forma de hacer esto más que con cursores. Supongamos que tenemos una consulta

Código SQL:
Ver original
  1. SELECT Nombre FROM Autor WHERE idautor = 1

y esta consulta te regresa lo siguiente:

Código:
Nombre
-----------------
Octavio Paz
Mario Vargas Llosa
Gabriel García Márquez
Puedes hacer esto:

Código SQL:
Ver original
  1. SELECT ConcatenarRegistros('Select Nombre from Autor where idautor = 1') AS Autor FROM dual;

Y la función te regresa lo siguiente:
Código:
Autor
-----------------
Octavio Paz, Mario Vargas Llosa, Gabriel García Márquez
Es decir, los tres registros unidos en un solo renglón separados por comas.

La función para hacer esto es la siguiente:

Código SQL:
Ver original
  1. FUNCTION ConcatenarRegistros(consulta IN VARCHAR2) RETURN VARCHAR2 IS
  2.   v_regreso  VARCHAR2(4000);
  3.   v_elemento VARCHAR2(4000);
  4.   v_cursor  sys_refcursor;
  5. BEGIN
  6.   OPEN v_cursor FOR consulta;
  7.   LOOP
  8.     FETCH v_cursor INTO v_elemento;
  9.     EXIT WHEN v_cursor%NOTFOUND;
  10.     IF v_regreso IS NULL THEN
  11.       v_regreso := v_elemento;
  12.     ELSE
  13.       v_regreso := v_regreso || ', ' || v_elemento;
  14.     END IF;
  15.   END LOOP;
  16.   RETURN v_regreso;
  17. END;

La función es muy sencilla y no tiene validaciones, así es que puede ser que tengas que hacer alguna adecuación adicional, pero espero que te pueda servir de algo.

Saludos.
Leo.

Etiquetas: muchos, relacion
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 10:23.