PostgreSQL - Ayuda- actializar en serie todos los Id de una tabla

 
Vista:

Ayuda- actializar en serie todos los Id de una tabla

Publicado por YYanes (20 intervenciones) el 15/03/2017 20:54:23
Hola amigos:

Tengo por ejemplo una tabla llamada MyTable con los atributos Id, Atrib1 y Atrib2 respectivamente, todos de tipo entero, en donde Id es el atributo llave principal.
Yo quisiera saber si es posible diseñar una función (dentro del propio Postgres, sin recurrir a mi aplicación en Java) que me altere todos los Id del primero al último comenzando desde el 1 hasta el último Id que encuentre. Por ejemplo

Por ejemplo:

ID Atrib1 Atrib2
9 11 11
10 22 22
11 33 33
15 44 44
18 55 55

Yo quisiera que quedara:

ID Atrib1 Atrib2
1 11 11
2 22 22
3 33 33
4 44 44
5 55 55

Un GigaSaludo y gracias por cualquier ayuda que puedan proporcionarme!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda- actializar en serie todos los Id de una tabla

Publicado por martin (120 intervenciones) el 16/03/2017 00:54:12
row_number()

SELECT tab.*,
row_number() OVER () as rnum
FROM tab;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda- actializar en serie todos los Id de una tabla

Publicado por YYanes (20 intervenciones) el 16/03/2017 16:36:49
Muchísimas graciassssss amigo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda- actializar en serie todos los Id de una tabla

Publicado por YYanes (20 intervenciones) el 16/03/2017 17:30:12
Hola nuevamente:
he estado investigando un poco sobre la función row_number() que me sugirió el amigo Martin, y la he probado un poco, pero sigo teniendo dificultades para conseguir lo que en verdad necesito. Verás: la función row_number() me devuelve un valor en tiempo de ejecución que es ideal para lanzar reportes y consultad datos, pero lo que necesito es ACTUALIZAR la tabla, por ejemplo:

Tabla Original "MiTabla" con los valores:

Id ----- At1 --- Atr2
2 ----- aaa --- a1a1
3 ----- bbb --- b1b1
25 --- ccc --- c1c1
(Nota: en MiTabla todos los atributos son repetibles, el único valor único es el del Id que es de hecho el atribullo llave principal)

Al correr un script como:
UPDATE MiTabla SET Id = (SELECT ROW_NUMBER () OVER (order by Id) as rw from MyTabla); //-- esto da error, pues la subconculta arroja más de un valor

Necesito que quede finalmente guardado en mi tabla:
Id ----- At1 --- Atr2
1 ----- aaa --- a1a1
2 ----- bbb --- b1b1
3 ----- ccc --- c1c1

¿Será posible al menos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda- actializar en serie todos los Id de una tabla

Publicado por YYanes (20 intervenciones) el 17/03/2017 14:42:27
Solucionado!!!! jajaja, aquí comparto la solución para quien necesite resolver un problema semejante:

1
2
3
4
5
with MiTabla_numerada
as(
select id, row_number() over(order by Id) as rw from MiTabla
)
update MiTabla SET Id = (Select rw from MiTabla_numerada WHERE MiTabla.Id = MiTabla_numerada.Id)

Un GigaSaludo a todos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar