Lists: | arpug |
---|
From: | Gustavo Vaccaro <gustavo_vaccaro(at)fibertel(dot)com(dot)ar> |
---|---|
To: | arpug(at)postgresql(dot)org |
Subject: | Problema con UPDATE |
Date: | 2010-09-06 00:40:22 |
Message-ID: | 4C843876.8040603@fibertel.com.ar |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | arpug |
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
From: | Sebastián Marró <sebastianlmarro(at)gmail(dot)com> |
---|---|
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-06 00:56:17 |
Message-ID: | AANLkTimtmReAaYXxb_s3e4vY+XBdpKF0-mokUa5FPMX-@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | arpug |
Hola Gustavo
No conozco sybase, pero yo haría...
UPDATE stock
SET disponible = disponible + (select sum(remitoing.cantidad)
WHERE stock.articulo=remitoing.articulo);
Saludos
--
Sebastián Marró
El 5 de septiembre de 2010 21:40, Gustavo Vaccaro <
gustavo_vaccaro(at)fibertel(dot)com(dot)ar> escribió:
> 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
>
>
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 |
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: | Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com> |
---|---|
To: | Gustavo Vaccaro <gustavo_vaccaro(at)fibertel(dot)com(dot)ar> |
Cc: | arpug(at)postgresql(dot)org |
Subject: | Re: Problema con UPDATE |
Date: | 2010-10-05 14:53:11 |
Message-ID: | AANLkTimLg=hbN=PiabRBAqVt9+kLBdP5Ye3pPUGZ=+Dh@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | arpug |
El día 6 de septiembre de 2010 02:40, Gustavo Vaccaro
<gustavo_vaccaro(at)fibertel(dot)com(dot)ar> escribió:
> 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;
>
UPDATE stock
SET disponible = (disponible + remitoing.remitoing)
FROM remitoing
WHERE stock.articulo = remitoing.articulo;
Creo que es un tema de parentesis. A mi me acumuló.
--
Emanuel Calvo Franco
Independient DBA
www.emanuelcalvofranco.com.ar