2

我正在使用内部联接从详细表中更新汇总表,如下所示

drop TEMPORARY table if exists summ ;
drop TEMPORARY table if exists det  ;

create TEMPORARY table summ (id int , val int ) ;
create TEMPORARY table det (id int , val int ) ;

insert into summ(id,val) value (1,0) ;
insert into summ(id,val) value (2,0) ;

insert into det(id,val) value (1,10) ;
insert into det(id,val) value (1,10) ;
insert into det(id,val) value (1,20) ;

update summ inner join det on summ.id = det.id 
set summ.val = summ.val+ det.val  ;

select * from summ  where id = 1;

它的显示值 val 是 10 而不是 40 .. 有什么问题?我在 Windows 上使用 Mysql 5.1

4

2 回答 2

2

尝试根据子查询加入表,该子查询计算val每个ID.

UPDATE  summ 
        INNER JOIN 
        (
            SELECT  id, SUM(VAL) totalVal
            FROM    det
            GROUP   BY id
        ) det ON summ.id = det.id 
SET     summ.val = det.totalVal
于 2013-05-06T09:32:50.057 回答
0

您以日志方式进行操作。尝试将第 14 行和第 15 行替换为:update summ

set summ.val = (select sum(det.vat) from det where det.id = summ.id);

或者你真的需要临时表。

看看 group by 和 sum 。

于 2013-05-08T06:51:24.690 回答