Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sql In (https://www.clubdelphi.com/foros/showthread.php?t=59100)

mjjj 12-08-2008 23:32:10

Sql In
 
Hola, necesito hacer una consulta que va algo asi:

Código SQL [-]
select * from tabla where empresa ='MMM' and
NOC IN (SELECT NOC FROM detcompras WHERE EMPRESA ='MMM' AND DESCRIP_INS LIKE '%clavo%'

realizo esta consulta y se queda pegado... se puede hacer, esto??

Caro 12-08-2008 23:55:28

Hola mjjj, si se puede hacer eso, a que te refieres con que se queda pegado.

Saluditos

mjjj 13-08-2008 04:01:58

He probado la sentencia SQL en varios programas...
En el IBExpert, realizo la consulta y nunca devuelve una respuesta.... se queda pegado el programa....

Sera que esta mal escrita la sentencia SQl

Gracias... saludos

Caro 13-08-2008 04:21:24

En la consulta que has puesto, lo unico que veo que le falta es un parentesis al final, pero cuando ejecutas la consulta debería salirte un mensaje de error por ese parentesis. Dices que no devuelve resultado, talvez sea porque el Select que toma el In no devuelve registros.

Código SQL [-]
select * from tabla where empresa ='MMM' and
NOC IN (SELECT NOC FROM detcompras WHERE EMPRESA ='MMM' AND DESCRIP_INS LIKE '%clavo%')

Saluditos

Neftali [Germán.Estévez] 13-08-2008 09:08:49

Habría que ver que datos maneja esa consulta y revisar el plan de ejecución.
Los LIKE no es que se an muy óptimos y dependiendo de los datos puede ser muy costoso y el NOT IN, tampoco ayuda. ;)

Intenta ejecutarla con un rango pequeño de datos y revisa los índices que tienes en las tablas.

Revisa que no se esté produciendo ningun bloqueo (deadlock) en la Bd mientras la ejecutas (no comentas si hay más procesos trabajando). aunque eso debería "saltar" al cabo de un rato por TimeOut/Deadlock.

hecospina 13-08-2008 13:21:28

HolaLa consulta debe funcionarlo primero es determinar si la segunda consulta devuelve resultados
Código SQL [-]
SELECT NOC FROM detcompras WHERE EMPRESA ='MMM' AND DESCRIP_INS LIKE '%clavo%'
y te recomendaria que colocaras alias a las tablas
Código SQL [-]
 select d.* from tabla d where d.empresa ='MMM' andNOC IN (SELECT t.NOC FROM detcompras t WHERE t.EMPRESA ='MMM' AND t.DESCRIP_INS LIKE '%clavo%')
Espero te funcione:)

mjjj 14-08-2008 20:46:11

hice lo que me sugeriste... funciono, pero se demoro unos 7 minutos en entregarme la respuesta... que fueron 2 registros!!

porque sera esto??

que otro codigo que puede servir para lo mismo??

luisgutierrezb 14-08-2008 20:56:21

Te podra Servir:

Código SQL [-]
Select tabla.* from tabla
inner join detcompras on detcompras.noc = tabla.noc
where tabla.empresa = 'MMM' and detcompras.DESCRIP_INS LIKE '%clavo%'

Caro 15-08-2008 17:25:47

Cita:

Empezado por mjjj (Mensaje 307688)
hice lo que me sugeriste... funciono, pero se demoro unos 7 minutos en entregarme la respuesta... que fueron 2 registros!!

porque sera esto??

que otro codigo que puede servir para lo mismo??

Como te indica luisgutierrezb puedes hacer un join directo entre tus dos tablas, otra cosita, tienes indices definidos en tus tablas, porque tenerlos ayuda mucho en la velocidad de las busquedas.

Saluditos


La franja horaria es GMT +2. Ahora son las 06:58: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