Re: Problema con UPDATE

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

In response to

Browse arpug by date

  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