Re: Duda con subconsultas y serial

From: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
To: "Jaime Casanova" <jcasanov(at)systemguards(dot)com(dot)ec>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Duda con subconsultas y serial
Date: 2008-12-24 14:50:48
Message-ID: 925902880812240650j10026cc2j30b681628877ce8e@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2008/12/23 Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>

> On Tue, Dec 23, 2008 at 8:29 PM, Julio Cesar Rodriguez Dominguez >
> >
> > postgres(at)contable[localhost]=# begin; create sequence s; select * from
> > (select nextval('s') as offset,idgrupo,grupo from (select idgrupo,grupo
> from
> > cc_grupos order by grupo) x ) xx where idgrupo=5;rollback;
> >
>
> postgres esta empujando los select internos hacia afuera, convirtiendo
> esto:
>
> select * from (select nextval('s') as offset,idgrupo,grupo
> from (select idgrupo,grupo
> from cc_grupos order by grupo) x ) xx
> where idgrupo=5
>
>
> en esto:
>
> select nextval('s') as offset,idgrupo,grupo
> from (select idgrupo,grupo from cc_grupos order by grupo) x
> where idgrupo=5
>
>
> si en cambio los escribes asi, hace lo que quieres:
>
> select * from (select nextval('s') as offset,idgrupo,grupo
> from (select idgrupo,grupo from cc_grupos
> order by grupo) x
> offset 0 ) xx
> where idgrupo=5;
>
Gracias Jaime, esto funciona muy bien.

>
> o mejor aun:
>
> select * from (select nextval('s') as offset, idgrupo, grupo
> from cc_grupos offset 0) as foo
> where idgrupo = 5
>

Esto no, ya que necesito que primero esten ordenados los registros y luego
aplicar el consecutivo, y con esto, aplica el serial y luego los ordena,
quedando el serial de manera de manera desordenada, (inserte un registro mas
, ya que con los datos anteriores, si salia el mismo resultado)
idgrupo | grupo
---------+---------------
7 | AAA
1 | ABCD
5 | BACILADORAS
3 | DENOMINACION
4 | LAS PAGADORAS
(5 filas)

ordenados;

offset | idgrupo | grupo
--------+---------+---------------
1 | 7 | AAA
2 | 1 | ABCD
3 | 5 | BACILADORAS
4 | 3 | DENOMINACION
5 | 4 | LAS PAGADORAS
(5 filas)

resultado queda con offset igual a 2, cuando deberia de ser 3:
postgres(at)contable[localhost]=# begin;create sequence s;select * from (select
nextval('s') as offset,idgrupo
,grupo from cc_grupos offset 0) as foo where idgrupo = 5;rollback;
BEGIN
CREATE SEQUENCE
offset | idgrupo | grupo
--------+---------+-------------
2 | 5 | BACILADORAS
(1 fila)

ROLLBACK

Bueno, pero solo me queda la duda, ¿Se considera normal que Postgresql
empuje los select's internos hacia afuera?

> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Asesoría y desarrollo de sistemas
> Guayaquil - Ecuador
> Cel. +59387171157
>

--
:: God bless you, every day and every night ::

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Maseguri5 2008-12-24 14:53:19 Re: Error en servicio
Previous Message Maseguri5 2008-12-24 09:26:19 Error en servicio