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 original
SELECT 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.