Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2005
erasmorc erasmorc is offline
Miembro
 
Registrado: ago 2004
Posts: 66
Poder: 20
erasmorc Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 14-12-2005
Avatar de jwmoreira
jwmoreira jwmoreira is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
jwmoreira Va por buen camino
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
ó también: (Versión 2.0)
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
Saludos,
Jorge.
Responder Con Cita
  #3  
Antiguo 14-12-2005
Avatar de jwmoreira
jwmoreira jwmoreira is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
jwmoreira Va por buen camino
Wink

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.
Responder Con Cita
  #4  
Antiguo 14-12-2005
FOURIER FOURIER is offline
Miembro
 
Registrado: dic 2005
Posts: 40
Poder: 0
FOURIER Va por buen camino
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;
Responder Con Cita
  #5  
Antiguo 14-12-2005
Avatar de jwmoreira
jwmoreira jwmoreira is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 20
jwmoreira Va por buen camino
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
Saludos,
Jorge.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:01:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi