Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group