From: | "Scienza Argentina - Dpto(dot) de Sistemas" <sistemas(at)scienza(dot)com(dot)ar> |
---|---|
To: | Gustavo Vaccaro <gustavo_vaccaro(at)fibertel(dot)com(dot)ar> |
Cc: | arpug(at)postgresql(dot)org |
Subject: | Re: Problema con UPDATE |
Date: | 2010-09-14 14:18:58 |
Message-ID: | AANLkTi=9VKXutR38R-_WeZr9s1txqvk9E6ekVdOSrwwb@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | arpug |
2010/9/5 Gustavo Vaccaro <gustavo_vaccaro(at)fibertel(dot)com(dot)ar>:
> A quien me pueda ayudar,
>
> Estoy migrando una base de datos de Sybase Anywhere 9 a PostgresSQL 8.4.
>
> Para probar como funciona PostgreSQL 8.4 le hice 2 tablas remitoing y stock
> y me puse a jugar.
>
> Cargue remitoing y stock con algunos datos para empezar con algo.
> Si hago estas consultas, obtengo lo siguiente:
>
> SELECT * FROM remitoing;
> nroremito articulo cantidad
> ------------------------------------
> 10 0001 100
> 11 0001 10
> 12 0001 30
>
> SELECT * FROM stock;
> articulo disponible
> ------------------------
> 0001 0
>
> Cuando ejecuto:
>
> UPDATE stock
> SET disponible = disponible + remitoing.cantidad
> FROM remitoing
> WHERE stock.articulo=remitoing.articulo;
>
>
> solamente obtengo:
> articulo disponible
> ------------------------
> 0001 30
>
> Hice varias pruebas y siempre pasa lo mismo. No me suma en la columna
> disponible.
> Lo unico que consigo es sumar uno de los registros y los demas no los toma.
> Si borro los registros de remitoing y los cargo en otro orden, me toma otro
> de los registros pero nunca me suma los 3.
> Las tablas tienen Primary Key.
> La verdad estoy desconcertado porque lo mismo en Sybase funciona perfecto y
> ademas es una sentencia muy simple.
>
> La instalacion de la base es nueva. No tiene nada raro y esta funcionando
> sobre Linux.
> Hice la misma prueba sobre una base de datos corriendo sobre Windows y me
> pasa lo mismo.
>
> ¿Es un bug? o ¿que es?
>
> Saludos
>
> --
>
> Gustavo J. Vaccaro
> http://www.gjv.com.ar
>
>
Buen día Gustavo, desde la experiencia en postgres (ya que no tengo
conocimientos teoricos sobre bases de datos) yo creo que la forma de
resolverlo es como lo planteo Sebastián.
Teniendo en cuenta también mi experiencia desarrollando y con
operaciones lógicas, estas buscando poner en un registro el resultado
de una consulta que devuelve 3 registros. La inteligencia de Postgre
esta en parte en no hacer lo que él quiere sino lo que vos querés.
Por ese motivo, vos tenes que pedirle a la db que sume esos 3
registros resultados y los vuelque a un solo registro (Como podrías
estar necesitando que tome el mas chico o el mas grande o un
promedio).
En PostgreSQL 9 existen algunas funciones que te permiten hacer lo que
comento Sebastián sin querys anidados.
Espero sumar a la aclaración.
Tené siempre presente la documentación en el sitio oficial.
Saludos
Federico Sansone
From | Date | Subject | |
---|---|---|---|
Next Message | Mariano Reingart | 2010-09-14 21:41:35 | SFD este sábado 18/9 en la Universidad de Morón, Bs. As. |
Previous Message | Angela Smith | 2010-09-14 12:58:37 | Re: Advanced Postgres DBA Training - Buenos Aires Nov. 16 - 18, 2010 |