2012-09-04 83 views
1

我想要做这样的事情:mysql的更新多个表

create table t1 (id varchar(20) NOT NULL default '', money decimal(20,4) NOT NULL default '0'); 

create table t2 (id varchar(20) NOT NULL default '', money decimal(20,4) NOT NULL default '0'); 

insert into t1 values('1',1); 

insert into t2 values('1',2); 
insert into t2 values('1',3); 

,我想添加相同的ID为T1的所有T2的钱,所以我用下面的SQL:

update t1,t2 set t1.money = t1.money + t2.money where t1.id = t2.id

,我想在表t1 ID '1' 的钱应该

1 + 2 + 3 = 6

,但实际上它是

1 + 2 = 3;

它似乎总是增加t2的第一行。

mysql> select * from t1; 

+----+--------+ 
| id | money | 
+----+--------+ 
| 1 | 3.0000 | 
+----+--------+ 

我怎样才能由一个SQL得到的

1 + 2 + 3

的值。

+0

有一个SO网站专门针对数据库的问题:) http://dba.stackexchange.com/ – jsj

+0

这是最可能的原因是,查询每个T2的行执行的事实。我认为价值被覆盖。 – Resh32

+0

你应该尝试一个内部查询,我会提供答案。 – Resh32

回答

0

你应该使用一个内部查询:

update t1 set t1.money = (select sum(t1.money) from t1) + (select sum(t2.money) from t2 where t2.id=t1.id) 

或类似的东西。

+0

感谢所有的答案,它实际上工作,但如果表t1有多个列应加起来,例如,t1有列money1和money2和money3,所以我应该写三个内部查询? – terry

1
UPDATE t1 SET t1.money = (SELECT SUM(t2.money) + t1.money FROM t2 WHERE t1.id = t2.id) 
+0

非常类似于我的 – Resh32

+0

但是没有考虑t1中的现有值。 – Resh32

+0

抱歉,修正了“t1中的现有值” – sumskyi