Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/07/2014, 07:22
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Un SELECT complejo con JOINs

Tu problema esta en este caso:
Código SQL:
Ver original
  1. s1.FECHDATOS = (SELECT MAX (FECHDATOS) FROM SERVICIO1)
Esa primera condición del WHERE es mandatoria, y no considera su contraparte de SERVICIO2. En ese contexto, si no se existe un registro en SERVICIO1, no saldrá en el resultado.
Si la relacion con ambos servicios es opcional, entonces te está faltando su contrapoartida:
Código SQL:
Ver original
  1. s2.FECHDATOS = (SELECT MAX (FECHDATOS) FROM SERVICIO2)
Por lo demás, tampoco tiene ninguna utilidad poner en la ultima condición cada OR dentro de un paréntesis. Con uno que englobe a todos ellos, es suficiente.
Código SQL:
Ver original
  1. /* Formatted on 2014/07/10 10:24 (Formatter Plus v4.8.7) */
  2. SELECT p.NOMBPROV,
  3.        s1.FECHDATOS,
  4.        s1.CODEMPR || "-" || e.NOMBEMPR,
  5.        s1.NOMBSERV,
  6.        s1.DATO1,
  7.        s1.DATO2,
  8.        s2.NOMBSERV,
  9.        s2.DATO1,
  10.        s2.DATO2
  11.   FROM PROVINCIAS p, SERVICIO1 s1, SERVICIO2 s2, EMPRESAS e
  12.  WHERE (   s1.FECHDATOS = (SELECT MAX (FECHDATOS)
  13.                              FROM SERVICIO1)
  14.         OR s2.FECHDATOS = (SELECT MAX (FECHDATOS)
  15.                              FROM SERVICIO2))
  16.    AND s1.CODPROV = p.CODPROV(+)
  17.    AND s1.CODEMPR = e.CODEMPR
  18.    AND s1.CODPROV = s2.CODPROV(+)
  19.    AND s1.CODEMPR = s2.CODEMPR(+)
  20.    AND s1.FECHADATOS = s2.FECHADATOS(+)
  21.    AND (   s1.DATO1 <> 0
  22.         OR s2.DATO1 <> 0
  23.         OR s1.DATO2 <> 0
  24.         OR s2.DATO2 <> 0);

Posdata: No postees un mensaje sólo para subir el post en la lista. Está prohibido expresamente por las Políticas de Uso de FDW. te recomiendo tenerlas en cuenta para evitar inconvenientes con la moderacion de los foros.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)