Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Buscar valores en dos campos distintos (https://www.clubdelphi.com/foros/showthread.php?t=96658)

IVAND 27-03-2024 20:08:05

Buscar valores en dos campos distintos
 
Hola a todos

Tengo un select
Código SQL [-]
select
coalesce(cant_a,0)
from producto_bodega pp,producto v ,empresa e
where (cod_producto=:codigo or cod_barra=:codigo)
And   key_bodega=:key_bodega and v.operativo='S' and v.key_empresa=e.key_empresa
And v.key_empresa=:key_empresa and pp.key_producto=v.key_producto

Si lo uso asi tal cual veo la consulta en ibexpert en el performance analysis y me dice que se usa la bisqyueda en 18000 registros que es la cantidad de registros que hay en la tabla producto (me regresa solo un registro q es lo normal)

Pero si solo busco por codigo si usar or Me dice q solo busco un registro q es lo correcto

Eso talvez me haga una busqueda, hasta ahora va rapido , pero mi duda es porque con or busca en toda a tabla , como hacen para que el sistema pueda buscar en un campo o en otro un valor sin usar like

Casimiro Notevi 28-03-2024 10:08:10

Creo que más o menos se entiende lo que quieres, pero para una mejor respuesta deberías darnos los campos de las tablas que afecta y exactamente lo que quieres conseguir.
Te recomiendo que leas esto:
Respuestas universales sobre SQL/Base de datos

duilioisola 28-03-2024 10:39:34

Para empezar te falta utilizar los ALIAS en cada campo.
De lo contrario, un campo que esté en dos tablas se convierte en ambiguo.
Código SQL [-]
select coalesce(???.cant_a, 0)
from producto_bodega pp, producto v, empresa e
where
(???.cod_producto = :codigo or ???.cod_barra = :codigo) and
???.key_bodega = :key_bodega and
v.operativo = 'S' and
v.key_empresa = e.key_empresa and
v.key_empresa = :key_empresa and
pp.key_producto = v.key_producto

Por otro lado, habría que saber cómo se unen las tablas (por ejemplo, mediante las Primary Keys de cada una).
Sin eso no se puede analizar el SQL.

Por último te recomiendo utilizar JOINs ya que hacen la consulta mucho más comprensible, y tienes formas de optimizar la consulta (JOIN, LEFT JOIN)
Código SQL [-]
select coalesce(???.cant_a, 0)
from producto_bodega pp
join producto v on pp.key_producto = v.key_producto
join empresa e on v.key_empresa = e.key_empresa
where
-- Filtro general (bodega+empresa + operativo)
???.key_bodega = :key_bodega and
v.key_empresa = :key_empresa and
v.operativo = 'S' and
-- Filtro especifico (codigo de producto o codigo de barra)
(???.cod_producto = :codigo or ???.cod_barra = :codigo)


La franja horaria es GMT +2. Ahora son las 00:48:54.

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