Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sin usar Subselect (https://www.clubdelphi.com/foros/showthread.php?t=61337)

andresenlared 04-11-2008 14:39:02

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

Caro 04-11-2008 15:19:03

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

andresenlared 04-11-2008 16:03:25

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

Caro 04-11-2008 16:28:47

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

andresenlared 04-11-2008 17:10:31

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 :)


La franja horaria es GMT +2. Ahora son las 04:33:50.

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