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

SQL complicada, ¿me podeis hechar una mano?

Estas en el tema de SQL complicada, ¿me podeis hechar una mano? en el foro de SQL Server en Foros del Web. Buenas tardes, estoy intentando realizar una consulta a base de datos sobre varias tablas: select V.VID_NOMBRE_FISICO , E.ENT_NOMBRE , T.OPC_VIDEO_DESC , J.PER_NOMBRE , A.PER_NOMBRE , ...
  #1 (permalink)  
Antiguo 03/04/2009, 05:53
 
Fecha de Ingreso: febrero-2008
Mensajes: 69
Antigüedad: 16 años, 2 meses
Puntos: 0
SQL complicada, ¿me podeis hechar una mano?

Buenas tardes, estoy intentando realizar una consulta a base de datos sobre varias tablas:

select
V.VID_NOMBRE_FISICO ,
E.ENT_NOMBRE ,
T.OPC_VIDEO_DESC ,
J.PER_NOMBRE ,
A.PER_NOMBRE ,
F.PER_NOMBRE ,
AE.PER_NOMBRE

from vid_video V,
ENT_ENTIDAD_HS E,
PER_PERSONAJE_HS J,
PER_PERSONAJE_HS A,
PER_PERSONAJE_HS F,
PER_PERSONAJE_HS AE,
OPC_VIDEO T,
RELACION_VIDEO RVE,
RELACION_VIDEO RVJ,
RELACION_VIDEO RVA,
RELACION_VIDEO RVF,
RELACION_VIDEO RVAE,
RELACION_VIDEO RVT

WHERE
V.VID_ID = RVE.VID_ID AND
V.VID_ID = RVJ.VID_ID AND
V.VID_ID = RVA.VID_ID AND
V.VID_ID = RVF.VID_ID AND
V.VID_ID = RVAE.VID_ID AND
V.VID_ID = RVT.VID_ID AND

E.ENT_ID(+) = RVE.REL_ID AND
J.PER_ID(+) = RVJ.REL_ID AND
A.PER_ID(+) = RVA.REL_ID AND
F.PER_ID(+) = RVF.REL_ID AND
AE.PER_ID(+) = RVAE.REL_ID AND
T.OPC_VIDEO_ID(+) = RVT.REL_ID AND
RVE.TIPO_VIDEO_ID = 1 AND
RVJ.TIPO_VIDEO_ID = 2 AND
RVA.TIPO_VIDEO_ID = 3 AND
RVF.TIPO_VIDEO_ID = 4 AND
RVAE.TIPO_VIDEO_ID = 5 AND
RVT.TIPO_VIDEO_ID = 6

order by
V.VID_NOMBRE_FISICO,
E.ENT_NOMBRE,
T.OPC_VIDEO_DESC,
J.PER_NOMBRE ,
A.PER_NOMBRE ,
F.PER_NOMBRE


La sql consiste en: una tabla video con los datos de los videos, una tabla relacion_video que contiene el id del video, el id del elemento relacionado y el tipo de relacion.

los tipos de relacion son:
1- entidad (con la tabla ENT_ENTIDAD_HS) 0 a 1
2- persona1 ( conla tabla PER_PERSONAJE_HS) 0 a n
3- persona2 ( conla tabla PER_PERSONAJE_HS) 0 a n
4- persona3 ( conla tabla PER_PERSONAJE_HS) 0 a n
5- persona4 ( conla tabla PER_PERSONAJE_HS) 0 a n
6- tipo video (con la tabla OPC_VIDEO) 0 a 1

el caso es que no es obligatorio que existan relaciones de todos los tipos, y para las relaciones 2,3,4 y 5, pueden existir varias personas relacionadas para un mismo video, estoy intentando que se muestren los datos aunque no exista relacion, pero la join externa (+) me da error.

Tambien tengo el problema de que me repite todos los datos varias veces, para cada registro de relacion con persona que exista...


No se si ha quedado bien explicado, si me pudierais echar una mano os lo agadecería

un saludo
  #2 (permalink)  
Antiguo 03/04/2009, 11:48
Avatar de Thumper  
Fecha de Ingreso: agosto-2004
Ubicación: Jesús María - Lima - Perú
Mensajes: 270
Antigüedad: 19 años, 8 meses
Puntos: 6
Respuesta: SQL complicada, ¿me podeis hechar una mano?

Deberias usar Join's en todas sus variantes.

INNER JOIN

LEFT JOIN

saludos
__________________
Martín Alexis Valdivia S.
-----------------------------
"Quisiéramos cambiar el mundo, pero Dios no nos daría el código fuente." CAP
"Si Saber No Es Un Derecho, Seguro Será Un Izquierdo." WD
  #3 (permalink)  
Antiguo 03/04/2009, 13:41
Avatar de cadesa  
Fecha de Ingreso: septiembre-2007
Ubicación: Guatemala
Mensajes: 130
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: SQL complicada, ¿me podeis hechar una mano?

Mira esta explicación de los Joins en Sql, con esto lo podras hacer

http://en.wikipedia.org/wiki/Join_(SQL)

Saludos.
__________________
死は永遠の一歩だ
  #4 (permalink)  
Antiguo 06/04/2009, 09:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 69
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: SQL complicada, ¿me podeis hechar una mano?

Gracias, con las Left Join me funciona, creia que el funcionamiento era equivalente a (+) pero parece ser que no
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 11:31.