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 04-11-2008
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Question Sin usar Subselect

Saludos.....

Tengo un problemilla de rendimiento al abrir un query.

tengo las siguientes tablas.

PORTAFOLIO
secportafolio
descripcion

PORTAFOLIODET
secportafoliodet
secportafilio
secactividad
sec_rscatid

J_CONTRATACION_ITEMS
sec_rscatid
secactividad

sobre la tabla PORTAFOLIODET estan los campos secactividad y sec_rscatid, sobre la tabla J_CONTRATACION_ITEMS estan los mismos campos, la idea es que sin usar subselect porder determinar cuales son los registros que le hacen falta a PORTAFOLIODET para que sea igual a J_CONTRATACION_ITEMS donde el campo sec_rscatid sea igual a un valor.

Muchas gracias
__________________
Popayán-Colombia
Responder Con Cita
  #2  
Antiguo 04-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola andresenlared, sería mucho mejor que pusieras datos, y en base a esos datos el resultado que quieres obtener así nos daríamos cuenta mas rapido, si te he entendido, mas o menos sería así.

Código SQL [-]
Select c.*, p.* 
From PORTAFOLIODET p right outer join 
J_CONTRATACION_ITEMS c on (p.secactividad=c.secactividad and p.sec_rscatid=c.sec_rscatid)
Where p.secportafoliodet is null

Algo así tendría que ser.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 04-11-2008
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Caro...Gracias por responder.

En datos seria algo asi..


PORTAFOLIODET
secportafoliodet secportafolio secactividad sec_rscatid
1 22 10 50
2 22 15 50
3 22 13 50
4 23 10 50
5 24 13 80



J_CONTRATACION_ITEMS
secjcontratacionitems secactividad sec_rscatid
1 10 50
2 15 50
3 13 50
4 30 50
5 40 50
6 50 50
7 13 80
8 17 80

La condicion: sec_rscatid=50 and secportafolio=22

Resultado
secjcontratacionitems secactividad sec_rscatid
4 30 50
5 40 50
6 50 50


Gracias
__________________
Popayán-Colombia
Responder Con Cita
  #4  
Antiguo 04-11-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, con la consulta que te puse, debería devolverte esto

secjcontratacionitems secactividad sec_rscatid
4 30 50
5 40 50
6 50 50
7 13 80
8 17 80

claro que en el Select se estan mostrando todos los campos, ahí colocas solo los que necesites.

Lo que no entiendo es esto "La condicion: sec_rscatid=50 and secportafolio=22". ¿tienes que aplicar alguna condición? , ademas si se aplicara no veo relación con el resultado que se esta obteniendo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 04-11-2008
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Wink

Carito...gracias por responder....

El sql que me enviaste ya lo habia probado y no me daban los registros que necesitaba.... la condicion que coloque es porque la tabla PORTAFOLIODET esta relacionada con la tabla PORTAFIOLIO y el campo SECPORTAFOLIO en PORTAFOLIODET es foranea. la consulta que necesito es unicamente para la informacion de un solo portafolio por eso la condicion de secportafolio=xx

De tanto probar me resulto lo que necesitada y el JOIN no lo hice sobre los dos campos y me quedo asi...

Código SQL [-]
left join portafoliodet on (j_contratacion_items.secactividad = portafoliodet.secactividad) and portafoliodet.secportafolio=xx
where j_contratacion_items.sec_rscatid=yy and portafoliodet.secportafoliodet is null

Por lo general siempre uso el Right o left para determinar cuando un registro esta en una tabla y que no este en otra y me funciona pero cuando el enlace es por un solo campo, para este caso el enlace se da por dos campos y no entiendo por que no funcionaba aplicando la misma filisofia.....pero bueno ya solucione el problema de rendimiento y efectivamente es mas rapido de esta forma que usando un subselect..

Gracias
__________________
Popayán-Colombia
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Subselect illegal in this context. eduarcol Firebird e Interbase 4 12-08-2008 18:01:34
usar FTP kapullok_2006 Internet 0 09-04-2007 12:20:07
Usar o no Usar un DBGrid Anabel Conexión con bases de datos 13 13-01-2006 20:05:21
Dll o BPL... que usar brandolin Varios 2 21-04-2005 18:10:03
q usar? demonr Impresión 6 29-07-2003 19:43:18


La franja horaria es GMT +2. Ahora son las 05:33:08.


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