dbTalk Databases Forums  

[SQL] UPDATE in a specific order

mailing.database.pgsql-sql mailing.database.pgsql-sql


Discuss [SQL] UPDATE in a specific order in the mailing.database.pgsql-sql forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Luiz K. Matsumura
 
Posts: n/a

Default [SQL] UPDATE in a specific order - 12-16-2010 , 08:57 AM






Hi,

I have a follow scenario:

CREATE TABLE table1 (
id integer
, vlpr numeric(10,2)
, vlab numeric(10,2)
, vlbx numeric(15,5)
, pct numeric(12,8)
);

CREATE TABLE table2 (
id integer
, fk_table1 integer
, tpop char(2)
, valor numeric(15,5)
);

insert into table1 VALUES ( 1, 200 , 0 , 0 , 1 );

insert into table2 VALUES
( 1, 1 , 'CR' , 100 )
, ( 2, 1 , 'BX' , 15 )
, ( 3, 1 , 'AC' , 40 );

I need to make update of table1 with data on table2 in the order of id
of table2

I´m trying to do an update like this:

UPDATE table1
SET vlab = vlab + CASE WHEN tHist.tpop IN ('BX' , 'DC')
THEN - tHist.valor
ELSE tHist.valor
END
, vlbx = vlbx + CASE WHEN tHist.tpop IN ('BX', 'DC')
THEN tHist.valor
ELSE 0
END
, pct = CASE WHEN tHist.tpop in ('AC', 'DC' )
THEN (vlpr - vlbx) / vlab
ELSE pct
END
FROM ( SELECT * FROM table2 ORDER BY id ) tHist
WHERE table1.id = tHist.fk_table1


The "FROM ( SELECT * FROM table2 ORDER BY id ) tHist" is a try to
force a specific order on table2 to update table1
but this isn´t working.

There are some way to do this with a UPDATE statement ?

Thanks in advance,

--
Luiz K. Matsumura
Plan IT Tecnologia Informática Ltda.
*
*

Reply With Quote
  #2  
Old   
Jasen Betts
 
Posts: n/a

Default Re: [SQL] UPDATE in a specific order - 12-16-2010 , 01:58 PM






Quote:
I need to make update of table1 with data on table2 in the order of id
of table2
that looks like EAV. is it?

Quote:
I=B4m trying to do an update like this:
that's not going to work.

perhaps you can rewrite the from part to only return one row for every
table1_fk, this one row will combine several rows from table2

Quote:
The "FROM ( SELECT * FROM table2 ORDER BY id ) tHist" is a try to
force a specific order on table2 to update table1
but this isn=B4t working.
will only work if the optimiser picks index join on table 1

Quote:
There are some way to do this with a UPDATE statement ?
to do it with an update statement you need no more than one rows in the
from for each row in the target.

easiest non update statement approach is probably to use a plpgsql
function with a loop.

basically you need to find another way to do it.



--
Sent via pgsql-sql mailing list (pgsql-sql (AT) postgresql (DOT) org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply With Quote
  #3  
Old   
Luiz K. Matsumura
 
Posts: n/a

Default Re: [SQL] UPDATE in a specific order - 12-17-2010 , 01:01 PM



Thanks for reply,

Em 16/12/2010 17:58, Jasen Betts escreveu:
Quote:
I need to make update of table1 with data on table2 in the order of id
of table2
that looks like EAV. is it?

Err, I don´t know so much about EAV, so I think that isn´t. I´m just
trying to reproduce a calc in a spreeadsheet.
Quote:
There are some way to do this with a UPDATE statement ?
to do it with an update statement you need no more than one rows in the
from for each row in the target.

easiest non update statement approach is probably to use a plpgsql
function with a loop.

basically you need to find another way to do it.

Ok! I make a function in plpgsql to do it.

Thank´s again !

*
*

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.