Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/08/2010, 09:18
occiso
 
Fecha de Ingreso: febrero-2005
Mensajes: 198
Antigüedad: 20 años
Puntos: 5
optimizar sql

Saludos compañeros,

Os planteo el siguiente problema. Tengo dos tablas y quiero obtener a partir de una sentencia sql (oracle) que si en ninguna de las dos hay registros dada una condición me devuelva un número diferente de cero. Explicándolo con un ejemplo:

tenemos las tablas A y B

No existen registros ni en la tabla A ni en la B --> resultado: (error) faltan registros (consulta devuelve valor diferente de cero)

Existen registro en A y B; Existen registros en A pero no en B; Existen registros en B pero no en A ---> resultado: (correcto) no faltan registros (consulta devuelve cero)

Tengo la select que funciona; pero no es optima

Código PHP:
SELECT
DECODE
(
    (
SELECT count(*)
        
FROM
            ALARMAS_USUARIOS ALUAUX
        WHERE
            ALUAUX
.IDEALP 1
        
AND ALUAUX.IDEALA 82
    
)
    +
    (    
    
SELECT count(*)
        
FROM
            ALARMAS_OFICINAS ALOAUX
        WHERE
            ALOAUX
.IDEALP 1
        
AND ALOAUX.IDEALA 82  
    
), 0,1,0
CONTIENE_REGISTROS
from dual 
He leído en esta página que:

Cita:
Para comprobar si existen registros para cierta condición, no se debe hacer un SELECT COUNT(*) FROM X WHERE xxx, sino que se hace un SELECT DISTINCT 1 FROM X WHERE xxx. De este modo evitamos al servidor que cuente los registros.
El problema es que si una de las consultas no tiene registros y no devuelve resultados hay casos en los que no me lo hace bien; podéis comprobar que algo sumado a null da null...

Código PHP:
elect 1+null from dual 
... y por tanto el decode no me lo hace bien.

¿alguien ve alguna alternativa mejor? Está claro que usando el count(*) me recorre toda la tabla y yo lo que quiero es que cuando se cumpla la condición de encontrar un registro, deje de recorrerla.

gracias!