Hola listeros!

En un servidor PostgreSQL version 8.4.2  en producción sobre Linux,
y la misma versión en Windows Xp para desarrollo, tengo la siguiente
consulta:

SELECT
tbl_07.tbl_07_asignacion,tbl_07.tbl_07_fecha,
tbl_01.tbl_01_codigo,tbl_01.tbl_01_nombre || ' ' ||
tbl_01.tbl_01_apellido AS NOMBRE,
tbl_03.tbl_03_pventa AS pventa,SUM(tbl_10.tbl_10_cant),
(tbl_03.tbl_03_pventa  - SUM(tbl_10.tbl_10_cant)) AS suma
FROM tbl_10 RIGHT JOIN tbl_08
ON tbl_10.tbl_08_no=tbl_08.tbl_08_no
RIGHT JOIN tbl_07 ON
tbl_07.tbl_07_asignacion=tbl_08.tbl_07_asignacion
RIGHT JOIN tbl_03 ON
tbl_07.tbl_03_placa=tbl_03.tbl_03_placa
RIGHT JOIN tbl_01 ON
tbl_07.tbl_01_codigo=tbl_01.tbl_01_codigo
WHERE tbl_10.tbl_08_no
IN (                            *//parentesi 1 que se abre*
    SELECT tbl_08.tbl_08_no FROM tbl_08 WHERE
    tbl_08.tbl_07_asignacion NOT IN
     (SELECT tbl_07.tbl_07_asignacion FROM tbl_08         *//parentesis 2
que se abre*
      LEFT JOIN tbl_07 ON
      tbl_08.tbl_07_asignacion=tbl_07.tbl_07_asignacion
      WHERE tbl_08.tbl_08_fecha>=date_mii(date(now()),1))    *//aca hay un
error, porque hay un parentesis que cierra*
      AND NOT tbl_07.tbl_07_estado='PAGADO'                    *//el cual
deberia ir aca*
     )                                     *//parentesis 1 que se cierra*
GROUP BY tbl_03.tbl_03_pventa,tbl_07.tbl_07_asignacion,
tbl_07.tbl_07_fecha,NOMBRE,tbl_01.tbl_01_codigo;


pero resulta, que con el valor 1 en esta linea: date_mii(date(now()),1) si
funciona y
con los valores actuales en la BD me arroja 92 registros.

Pero como me funciono, y no me dio errores de sintaxis lo deje asi.

Ahora bien, esoy realizando unos cambios en la aplicación, pero instale la
versión 9.0.1 para desarrollo,
y alli es donde esta la incoherencia, al ejecutar la sentencia anterior no
me muestra ningun registro
y tampoco me dice que hay error.

Revisando, me doy cuenta que hay un error con respecto a los parentesis, por
lo cual la sentencia deberia quedar asi:

SELECT
tbl_07.tbl_07_asignacion,tbl_07.tbl_07_fecha,
tbl_01.tbl_01_codigo,tbl_01.tbl_01_nombre || ' ' ||
tbl_01.tbl_01_apellido AS NOMBRE,
tbl_03.tbl_03_pventa AS pventa,SUM(tbl_10.tbl_10_cant),
(tbl_03.tbl_03_pventa  - SUM(tbl_10.tbl_10_cant)) AS suma
FROM tbl_10 RIGHT JOIN tbl_08
ON tbl_10.tbl_08_no=tbl_08.tbl_08_no
RIGHT JOIN tbl_07 ON
tbl_07.tbl_07_asignacion=tbl_08.tbl_07_asignacion
RIGHT JOIN tbl_03 ON
tbl_07.tbl_03_placa=tbl_03.tbl_03_placa
RIGHT JOIN tbl_01 ON
tbl_07.tbl_01_codigo=tbl_01.tbl_01_codigo
WHERE tbl_10.tbl_08_no
IN (                        *//parentesis 1 que se abre*
    SELECT tbl_08.tbl_08_no FROM tbl_08 WHERE
    tbl_08.tbl_07_asignacion NOT IN
     (SELECT tbl_07.tbl_07_asignacion FROM tbl_08    *//parentesis 2 que se
abre*
      LEFT JOIN tbl_07 ON
      tbl_08.tbl_07_asignacion=tbl_07.tbl_07_asignacion
      WHERE tbl_08.tbl_08_fecha>=date_mii(date(now()),1)   *//aca solo va un
parentesis que cierra*
      AND NOT tbl_07.tbl_07_estado='PAGADO'

)
   *//parentesis
2 que se cierra*
   )                       *//parentesis 1 que se cierra*
GROUP BY tbl_03.tbl_03_pventa,tbl_07.tbl_07_asignacion,
tbl_07.tbl_07_fecha,NOMBRE,tbl_01.tbl_01_codigo;


Ahora como resultado de esta correción, en la versión 9.0.1 ahora si me
muestra registros,
y probando con la versión 8.4.2 me muestra 106 registros, y con la sentencia
anterior
que contiene el error me muestra 92


En donde esta el truco?? por decirlo asi


-- 
Saludos

_________________
José de Paz
Escuintla, Guatemala
Tel. (502)-56041676

http://desarrolloescuintla.wordpress.com

Responder a