Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/07/2014, 06:35
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Un SELECT complejo con JOINs

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 original
  1. SELECT p.NOMBPROV,
  2.        s1.FECHDATOS,
  3.        s1.CODEMPR || "-" || e.NOMBEMPR
  4.        s1.NOMBSERV,
  5.        s1.DATO1,
  6.        s1.DATO2,
  7.        s2.NOMBSERV,
  8.        s2.DATO1,
  9.        s2.DATO2
  10.  
  11. FROM PROVINCIAS p,
  12.      SERVICIO1 s1,
  13.      SERVICIO2 s2,
  14.      EMPRESAS e
  15.  
  16. WHERE s1.FECHDATOS = (SELECT MAX (FECHDATOS ) FROM SERVICIO1) AND
  17.       s1.CODPROV = p.CODPROV(+) AND
  18.       s1.CODEMPR = e.CODEMPR AND
  19.       s1.CODPROV = s2.CODPROV(+) AND
  20.       s1.CODEMPR = s2.CODEMPR(+) AND
  21.       s1.FECHADATOS = s2.FECHADATOS(+) AND
  22.     ((s1.DATO1 <> 0 OR
  23.       s2.DATO1 <> 0) OR
  24.      (s1.DATO2 <> 0 OR
  25.       s2.DATO2 <> 0))
  26. ;

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.

Última edición por gnzsoloyo; 10/07/2014 a las 06:49