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

ayuda con Select en varias tablas

Estas en el tema de ayuda con Select en varias tablas en el foro de Bases de Datos General en Foros del Web. Hola a todos, tal vez el título no se ajusta a mi problema pero bueno... :) El asunto es q tengo esta consulta: Select a.fecha_Desp, ...
  #1 (permalink)  
Antiguo 23/06/2005, 15:05
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
Exclamación ayuda con Select en varias tablas

Hola a todos, tal vez el título no se ajusta a mi problema pero bueno... :)

El asunto es q tengo esta consulta:

Select a.fecha_Desp, a.hora_desp, a.origen, a.destino, a.cod_desp, a.obs_desp, b.des_despacho
from DocxDespacho as a, Despacho as b
where a.cod_doc = 33 and a.cod_desp = b.cod_despacho

para poder cambiar el codigo de despacho q estaba en número (cod_desp) a su respectiva descripción (des_Despacho). Hasta ahi todo bien, el problema viene con los campos origen y destino, tales campos se muestran en código (DXX si es de la tabla Dependencia y SDXX si es de la tabla Subdependencia) y lo q busco es mostrar las descripciones de las mismas. MI problema es xq cuando hago la consulta q puse líneas arriba, me peden salir n resultados y x ejemplo los resultados puede ser(mostrando solo los campos origen y destino):
origen destino
D12 | SD3
SD10 | D3
D10 | D5
SD11 | SD3

Cómo tendría que ser mi consulta para q me salga las descripciones en vez de los códigos de origen y destino?? Muchas gracias de antemano.
__________________
Tarecito

Última edición por Tarecito; 23/06/2005 a las 15:33
  #2 (permalink)  
Antiguo 24/06/2005, 09:33
Avatar de sir_joshua  
Fecha de Ingreso: diciembre-2004
Mensajes: 411
Antigüedad: 19 años, 11 meses
Puntos: 0
cambia los codigos por las descripciones en la clausula del select...

aunke se te podria ayudar mejor si pusieras la descripcion de ambas tablas.

salu2.
__________________
http://sir-joshua.hi5.com
Mex. Mex.
  #3 (permalink)  
Antiguo 24/06/2005, 10:09
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
hola sir_joshua... a ver, la tablas Dependencia tiene los campos cod_dependencia y des_dependencia, y la tabla Subdependencia tiene los campos cod_subdep, cod_dependencia, y des_subdep. La tabla sobre la cuál hago la consulta es la tabla DocxDespacho, q tiene los campos cod_desp, fecha_desp, hora_desp, origen, cod_desp, destino, asunto y obs_desp
__________________
Tarecito
  #4 (permalink)  
Antiguo 24/06/2005, 10:11
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
habia pensado en cambiar los códigos x las descripciones, pero no se a q tabla enlazarlo, xq en un registro puedo necesitar hacerlo con la tabla Dependencia y en otro registro para la tabla Subdependencia.. .tanto para los campos origen como para destino, incluso puede ser necesario las dos tablas a la vez, pero ese DEPENDE del resultado q me bote la consulta q puse arriba... no se si me he explicado bien
__________________
Tarecito
  #5 (permalink)  
Antiguo 24/06/2005, 20:38
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
creo q la idea sería ponerle una condicion a la consulta pero cómo sería esa condición, o si la pongo en asp o en la misma consulta
__________________
Tarecito
  #6 (permalink)  
Antiguo 25/06/2005, 06:07
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 9 meses
Puntos: 3
no se si lo he entendido bien.

creo que lo que quieres decir es que el valor de los campos "destino" y "origen" pueden hacer referencia a tablas distintas, dependiendo de su valor (si empieza por "SD" o "D"), no?

en este caso haria un "left join" con ambas tablas, y en la pagina donde vas a presentar los resultados mostraria solo el valor adecuado.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #7 (permalink)  
Antiguo 25/06/2005, 08:05
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
hola haron, gracias por responder, me has entendido a la perfección... pero pero no entiendo muy bien eso del "left join", podrías explicármelo x favor??
__________________
Tarecito
  #8 (permalink)  
Antiguo 25/06/2005, 09:37
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
se supone q el left join también me devuelve los campos de la tabla de la izquierda aun asi no tenga correspondencia con la table de la derecha, pero... en ese caso tendria q hacer dos consultas, una para opción?? (SD o D)
__________________
Tarecito
  #9 (permalink)  
Antiguo 25/06/2005, 14:36
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 9 meses
Puntos: 3
seria algo asi:
Código:
select t.origen, d.descripcion, sd.descripcion
from tabla t
left join dependencia d on d.codigo = t.origen
left join sub_dependencia sd on sd.codigo = t.origen
en el caso anterior, puede ser que el campo 'origen' no tenga un registro en alguna de las tablas. en este caso o bien 'd.descripcion' o 'sd.descripcion' sera nulo, pero no ambos. en tu pagina .asp deberas escoger entre ambos campos, para mostrar el correcto.

en tu caso, seria un poco mas complicado, porque tienes dos campos 'origen' y 'destino' que pueden hacer referencias a dos tablas.

seria algo asi:
Código:
select
  t.origen, d1.descripcion, sd1.descripcion, -- descripciones de 'origen'
  t.destino, d2.descripcion, sd2.descripcion -- descripciones de 'destino'
from tabla t
left join dependencia d1 on d1.codigo = t.origen
left join sub_dependencia sd1 on sd1.codigo = t.origen
left join dependencia d2 on d2.codigo = t.destino
left join sub_dependencia sd2 on sd2.codigo = t.destino
la diferencia entre 'left join' e 'inner join' es que el primero te sigue presentando el registro aunque no exista un registro correspondiente en la otra tabla. 'inner join' es un producto cartesiano entre tablas.
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #10 (permalink)  
Antiguo 26/06/2005, 02:27
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
muchas gracias x la ayuda haron, voy a probar el código, luego te cuento como me fue.
__________________
Tarecito
  #11 (permalink)  
Antiguo 30/06/2005, 13:35
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
holas, logré hacer la consulta q es como sigue:

select id_doc, fecha_desp, hora_desp, obs_desp, cod_desp, Origen, NombreOrigen = COALESCE(do.des_dependencia, sdo.abrev),
Destino, NombreDestino = COALESCE(dd.des_dependencia, sdd.abrev)
from DocxDespacho
left join Dependencia DO ON Origen = do.cod_dependencia
left join SubDependencia SDO ON Origen = sdo.cod_subdep
left join Dependencia DD ON Destino = dd.cod_dependencia
left join SubDependencia SDD ON Destino = sdd.cod_subdep
where id_doc = '00000095-05'

pero ahora necesito agregarle un join simple para q el cod_desp (q me muestra solo el codigo) aparezca como desc_despacho (descripcion del despacho)... mejor dicho, q me salga tambien el campo desc_despacho, q pertenece a la tabla despacho. Yo lo estaba haciendo asi (disculpen los errores garrafales :P ) pero me sale "error cerca de la palabra clave 'where'":

select a.id_doc, a.fecha_desp, a.cod_desp, a.hora_desp, a.obs_desp, a.Origen, NombreOrigen = COALESCE(do.des_dependencia, sdo.abrev),
a.Destino, NombreDestino = COALESCE(dd.des_dependencia, sdd.abrev), b.des_despacho
from DocxDespacho as a
join Despacho as b
left join Dependencia DO ON a.Origen = do.cod_dependencia
left join SubDependencia SDO ON a.Origen = sdo.cod_subdep
left join Dependencia DD ON a.Destino = dd.cod_dependencia
left join SubDependencia SDD ON a.Destino = sdd.cod_subdep
where a.id_doc = '00000099-05' and a.cod_desp = b.cod_despacho

Alguien podria ayudarme x favor???
__________________
Tarecito
  #12 (permalink)  
Antiguo 30/06/2005, 14:17
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 9 meses
Puntos: 3
prueba esto
Código:
join Despacho b ON a.cod_desp = b.cod_despacho
y quitalo del 'where'
__________________
Si ocurre algo importante, estamos afuera fumándonos unos cigarritos.
  #13 (permalink)  
Antiguo 30/06/2005, 14:43
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 21 años
Puntos: 1
gracias haron, era eso :P
__________________
Tarecito
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 23:13.