FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Query un poco complicado
Buenas tardes,
La pregunta resumida es como relacionar un campo que esta contenido en el resultado de un select con otra tabla. Tengo el siguiente problema tengo un select que me arroja unos resultado los cuales quiero utilizar para relacionar uno de los campos de ese resultado con otra tabla a travez de un join. como hacer el Join eso lo tengo bastante claro la pregunta es como utilizar el resultado del select que esta en esa misma sentencia. Las tablas y la base de datos son de SQL server 2000 y estoy usando el query analizer del mismo SQL. Pienso que quizas con Queries anidados podria hacerlo pero no se como utilizarlos. Recuerden que el resultado del select no es una tabla fisica entonces eso es lo que no se como hacer tomar ese resultado del select o mejor dicho uno de sus campos para relacionarlo con otra tabla. Si tienen algun link donde haya informacion, o algun ejemplo se los agradeceria, actualmente lo resolvi insertando ese resultado en otra tabla y haciendo la relacion a partir de ella, pero no es un metodo elegante ni profesional. El problema que tengo no es con los join en realidad, ese tema lo manejo mas o menos bien, mi problema es como puedo usar el resultado que me da un query para relacionarlo con otra tabla. por ejemplo : Tabla1 codigo Char nombre Char sueldo Float codigocomentario Char Tabla2 codigo Char (relacion con tabla1.codigo) descuento Tabla3 (contiene comenatarios) codigo Char (relacion con tabla1.codigocomentario) descripcion Text Select T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario, SUM(T2.descuento) As descuento From Tabla1 as T1 LEFT JOIN Tabla2 As T2 ON T1.codigo = T2.codigo WHERE T1.codigo= num Group by T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario Order By T1.codigo Hasta ahi todo va bien, pero yo necesitaba en ese select la descripcion que contiene la tabla Tabla3 pero no puedo agregarla ya que tiene el campo descripcion tipo Text por lo cual no puedo tenerla en el Group by, que pasa lo que he pensado es el resultado de ese query que esta arriba utilizarlo para hacer en otro select un join con la tabla a traves de los campos T1.codigocomentario ( que estaria incluido en el resultado del primer select) y el campo T3.codigo. Actualmente lo que hago es que el resultdo del primer select lo inserto en una tabla y entonces hago el join con la tabla Tabla3, pero este metodo no es el mas recomendado. Estas tablas que estoy presentando no son las reales de la problematica pero reflejan lo que quiero hacer. Si tienes un manual que contenga de forma detallada como trabajar con select anidados y me lo puedes facilitar te lo voy a agradecer mucho, o algun ejemplo que me ayude en el tema. Slds, Neo |
#2
|
||||
|
||||
A ver si te sirve ésto:
Código:
select tabla1.campo, tabla2.campo, tabla3.campo from tabla1 left outer join tabla2 on tabla1.campo1 = tabla2.campo left outer join tabla3 on tabla1.campo2 = tabla3.campo Código:
select alias.campo, alias.campo, tabla3.campo from ( select tabla1.campo, tabla2.campo from tabla1 left outer join tabla2 on tabla1.campo1 = tabla2.campo ) alias left outer join tabla3 on alias.campo = tabla3.campo Jorge. |
#3
|
||||
|
||||
Perdon, a lo que me refiero con lo de la versión 2.0 eso es para Firebird, si es sql server, oracle, Informix no he tenido problema.
Saludos, Jorge. |
#4
|
|||
|
|||
Espero Que Te Sirva Esto
Buenas tardes,
primero que nada lo que entiendo es que quieres desplegar los sigguiente: T1.CODIGO T1.NOMBRE T1.SUELDO T1.CODIGOCOMENTARIO T3.DESCRIPION SUM(T2.Descuento) esas son tus tablas; Tabla1 codigo Char nombre Char sueldo Float codigocomentario Char Tabla2 codigo Char (relacion con tabla1.codigo) descuento Tabla3 (contiene comenatarios) codigo Char (relacion con tabla1.codigocomentario) descripcion Text a lo que entiendo con tu esquema es que un comentario en tabla3 lo puedes asignar a varias tablas1... finalmente entiendo también que la tabla2 contiene varios descuentos para la tabla2 y que además de eso la tabla 2 no tiene campo llave.. en fin y finalmente segun la consulta que me pones que haces Select T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario, SUM(T2.descuento) As descuento From Tabla1 as T1 LEFT JOIN Tabla2 As T2 ON T1.codigo = T2.codigo WHERE T1.codigo= num Group by T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario Order By T1.codigo entiendo que pasas como parámeto el código a T1.codigo por medio de la variable num. si todo esto es cierto entonces podríamos resolver tu problema de la siguiente forma select T1.Codigo,T1.nombre,T1.sueldo,T1.codigocomentario,T3.descripcion,(select sum(T2.descuento) from Tabla2 as T2 where T2.codigo=T1.codigo) as Descuentos from Tabla1 as T1,Tabla3 as T3 where T1.codigocomentario=T3.codigo and T1.codigo= num; |
#5
|
||||
|
||||
Aplicado a tu select:
Código:
Select T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario, (Select SUM(T2.descuento) From Tabla2 As T2 Where T2.codigo = T1.codigo ) As descuento, T3.descripcion From Tabla1 as T1 LEFT OUTER JOIN Tabla3 As T3 ON T1.codigocomentario = T3.codigo WHERE T1.codigo= :pnum Order By T1.codigo Código:
Select T.*,T3.descripcion FROM ( Select T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario, SUM(T2.descuento) As descuento From Tabla1 as T1 LEFT OUTER JOIN Tabla2 As T2 ON T1.codigo = T2.codigo WHERE T1.codigo= :pnum Group by T1.codigo,T1.nombre,T1.sueldo,T1.codigocomentario ) As T LEFT OUTER JOIN Tabla3 As T3 ON T.codigocomentario = T3.codigo Order By T.codigo Jorge. |
|
|
|