Buenos días amigos,
os escribo porque tengo problemas con una consulta SQL de ORACLE. Esta consulta es heredada (es decir, no la hice yo), y hemos detectado que tenemos un problemilla.
La consulta SQL que pongo de ejemplo es:
Código SQL:
Ver originalSELECT p.NOMBPROV,
s1.FECHDATOS,
s1.CODEMPR || "-" || e.NOMBEMPR
s1.NOMBSERV,
s1.DATO1,
s1.DATO2,
s2.NOMBSERV,
s2.DATO1,
s2.DATO2
FROM PROVINCIAS p,
SERVICIO1 s1,
SERVICIO2 s2,
EMPRESAS e
WHERE s1.FECHDATOS = (SELECT MAX (FECHDATOS ) FROM SERVICIO1) AND
s1.CODPROV = p.CODPROV(+) AND
s1.CODEMPR = e.CODEMPR AND
s1.CODPROV = s2.CODPROV(+) AND
s1.CODEMPR = s2.CODEMPR(+) AND
s1.FECHADATOS = s2.FECHADATOS(+) AND
((s1.DATO1 <> 0 OR
s2.DATO1 <> 0) OR
(s1.DATO2 <> 0 OR
s2.DATO2 <> 0))
;
La intención es
unificar los datos de ambos servicios (SERVICIO1 y SERVICIO2). Sin embargo, tal y como está actualmente montada la sentencia, me mostrará los datos de ambos servicios siempre y cuando la EMPRESA trabaje para dar soporte,
al menos, en SERVICIO1.
Es decir, si la empresa con CODEMPR "EMPR01" da soporte a SERVICIO1 y SERVICIO2, la obtendremos en el SELECT. Si la empresa con CODEMPR "EMPR02" da soporte a SERVICIO1 sólamente, también la obtendremos en el SELECT. Sin embargo, si la empresa con CODEMPR "EMPR03" da soporte únicamente a SERVICIO2, no obtendremos dichos datos en el SELECT.
Creo que la cuestión está en que estamos tomando en el lado izquierdo de las comparaciones del WHERE con SERVICIO1. He intentado probar algunas modificaciones de la sentencia SQL, pero no logro solucionar esta errata. ¿Podríais orientarme y ayudarme?
Muchas gracias de antemano. Un saludo.