Re: Re[2]: Left Outer join

From: Juan Martínez <jeugenio(at)umcervantes(dot)cl>
To: Miguel Bernilla Sánchez <mbernilla(at)sedapal(dot)com(dot)pe>
Cc: Alvaro Herrera <alvherre(at)commandprompt(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Re[2]: Left Outer join
Date: 2006-04-18 21:40:39
Message-ID: 1145396440.16751.43.camel@localhost.localdomain
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El mar, 18-04-2006 a las 15:34 -0500, Miguel Bernilla Sánchez escribió:
> Estamos evaluando migrar de ORACLE a PostgreSQL y en nuestras
> aplicaciones tenemos querys (varias decenas) como el siguiente:
>
> SELECT "RECIBOS"."F_FACT",
> "RECIBOS"."SEC_REC",
> "RECIBOS"."NIS_RAD",
> "RECIBOS"."SEC_NIS",
> "RECIBOS"."IMP_TOT_REC",
> "RECIBOS"."NRO_FACTURA",
> "RECIBOS"."EST_ACT",
> "RECIBOS"."SEC_REC_ANUL",
> to_char("RECIBOS"."F_FACT_ANUL",'DD/MM/YYYY'),
> "RECIBOS"."TIP_REC",
> "AGENCIAS"."NOM_AGENCIA",
> "SUCURSALES"."NOM_SUCURSAL",
> 'ü',
> "RECIBOS"."SIMBOLO_VAR",
> "RECIBOS"."SEC_CTA",
> "RECIBOS"."F_PUESTA_COBRO",
> "RECIBOS"."IMP_CTA",
> "RECIBOS"."COD_AGENCIA",
> "RECIBOS"."F_VCTO_FAC",
> "RECIBOS"."F_COBRO"
> FROM "SUCURSALES", "AGENCIAS", "RECIBOS"
> WHERE ( "RECIBOS"."COD_SUCURSAL" = "SUCURSALES"."COD_SUCURSAL"(+) ) AND
> ( "RECIBOS"."COD_AGENCIA" = "SUCURSALES"."COD_AGENCIA"(+) ) AND
> ( "RECIBOS"."COD_AGENCIA" = "AGENCIAS"."COD_AGENCIA"(+) ) AND
> ( "RECIBOS"."SEC_NIS" = :secnis ) AND
> ( "RECIBOS"."NIS_RAD" = :nis ) AND
> ( "RECIBOS"."EST_ACT" <> 'ER315') AND
> ( :parametro = 1) AND
> ( "RECIBOS"."COD_CLI" = :codcli )
>
> UNION
> SELECT "PAGOS"."F_FACT",
> "PAGOS"."SEC_REC",
> "PAGOS"."NIS_RAD",
> "PAGOS"."SEC_NIS",
> "RECIBOS"."IMP_TOT_REC",
> "RECIBOS"."NRO_FACTURA",
> "RECIBOS"."EST_ACT",
> "RECIBOS"."SEC_REC_ANUL",
> to_char("RECIBOS"."F_FACT_ANUL",'DD/MM/YYYY'),
> "PAGOS"."TIPREC",
> "AGENCIAS"."NOM_AGENCIA",
> "SUCURSALES"."NOM_SUCURSAL",
> 'ü',
> "PAGOS"."SIMBOLO_VAR",
> "RECIBOS"."SEC_CTA",
> "RECIBOS"."F_PUESTA_COBRO",
> "PAGOS"."IMP_PAGO",
> "PAGOS"."COD_AGENCIA",
> "RECIBOS"."F_VCTO_FAC",
> "PAGOS"."F_PAGO"
> FROM "SUCURSALES", "AGENCIAS", "RECIBOS", "PAGOS"
> WHERE ( "PAGOS"."COD_SUCURSAL" = "SUCURSALES"."COD_SUCURSAL"(+) ) AND
> ( "PAGOS"."COD_AGENCIA" = "SUCURSALES"."COD_AGENCIA"(+) ) AND
> ( "PAGOS"."COD_AGENCIA" = "AGENCIAS"."COD_AGENCIA"(+) ) AND
> ( "RECIBOS"."SEC_NIS" = :secnis ) AND
> ( "RECIBOS"."NIS_RAD" = :nis ) AND
> ( "RECIBOS"."COD_CLI" = :codcli ) AND
> ( :parametro = 1) AND
> ( "RECIBOS"."EST_ACT" = 'ER315') AND
> ( "RECIBOS"."NIS_RAD" = "PAGOS"."NIS_RAD" ) and
> ( "RECIBOS"."SEC_NIS" = "PAGOS"."SEC_NIS" ) AND
> ( "RECIBOS"."SEC_REC" = "PAGOS"."SEC_REC" ) AND
> ( "RECIBOS"."F_FACT" = "PAGOS"."F_FACT" ) AND
> ( "RECIBOS"."SIMBOLO_VAR" = "PAGOS"."SIMBOLO_VAR" )
>
> UNION
> SELECT "RECIBOS"."F_FACT",
> min("RECIBOS"."SEC_REC"),
> min("RECIBOS"."NIS_RAD"),
> min("RECIBOS"."SEC_NIS"),
> sum("RECIBOS"."IMP_TOT_REC"),
> min("RECIBOS"."NRO_FACTURA"),
> min("RECIBOS"."EST_ACT"),
> min("RECIBOS"."SEC_REC_ANUL"),
> min(to_char("RECIBOS"."F_FACT_ANUL",'DD/MM/YYYY')),
> min("RECIBOS"."TIP_REC"),
> max("AGENCIAS"."NOM_AGENCIA"),
> max("SUCURSALES"."NOM_SUCURSAL"),
> 'ü',
> "RECIBOS"."SIMBOLO_VAR",
> min("RECIBOS"."SEC_CTA"),
> min("RECIBOS"."F_PUESTA_COBRO"),
> sum("RECIBOS"."IMP_CTA"),
> max("RECIBOS"."COD_AGENCIA"),
> min("RECIBOS"."F_VCTO_FAC"),
> max("RECIBOS"."F_COBRO")
> FROM "SUCURSALES", "AGENCIAS", "RECIBOS"
> WHERE ( "RECIBOS"."COD_SUCURSAL" = "SUCURSALES"."COD_SUCURSAL"(+) ) AND
> ( "RECIBOS"."COD_AGENCIA" = "SUCURSALES"."COD_AGENCIA"(+) ) AND
> ( "RECIBOS"."COD_AGENCIA" = "AGENCIAS"."COD_AGENCIA"(+) ) AND
> ( "RECIBOS"."SIMBOLO_VAR" LIKE to_char(:nis)||'%') AND
> ( :parametro = 2) AND
> ( "RECIBOS"."COD_CLI" = :codcli )
> GROUP BY "RECIBOS"."SIMBOLO_VAR", "RECIBOS"."F_FACT"
> ORDER BY 1 DESC, 2 ASC
>
>
> y como verás, para mí va a ser más práctico contar con una forma
> simplificada de reconstruir los Left Outer Join... antes que reescribirlos con el
> estandar SQL. No es que me duelan los dedos o no quiera desgastar mi
> teclado... es un tema de simplificar las cosas...

Mmm...entiendo, eran bromas eh!

Hay varias formas de simplificar:

- Usar alias, en lo que mandas no hay ni un solo alias, son muy utiles
al momento de simplificar.
- Usar vistas, son muy utiles tambien si eso es una consulta que se usa
desde alguna aplicacion.
- Los operadores en postgres (no se en los otros DBMS) tienen
abreviaturas.

--
Juan Martínez
Depto. Inf.
UMC

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Andres Serrano 2006-04-18 22:03:04 Re: Eliminar procesos lanzados por un cliente
Previous Message Mario Gonzalez 2006-04-18 21:08:02 Re: Eliminar procesos lanzados por un cliente