MySQL使用内部联接更新现有值

MySQL使用内部联接更新现有值,mysql,sql,Mysql,Sql,我使用内部联接从细节表更新摘要表,如下所示 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

我使用内部联接从细节表更新摘要表,如下所示

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

尝试针对子查询加入表,该子查询计算每个
ID
的总
val

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

你是按原样做的。尝试用以下内容替换第14行和第15行: 更新摘要

set summ.val = (select sum(det.vat) from det where det.id = summ.id);
或者你真的需要临时表


查看分组依据和总和。

是的,它与子查询一起工作……我已经测试过了。。。但这有什么错呢?更新只对每个ID运行一次,即使它加入了多个记录——原因是只有10个
summ.val=summ.val+det.val
——这不会执行运行总计。嗨,John。我怀疑你能解决它吗?中的
GROUP\u CONCAT
的等价物是什么?它给出了预期的结果。我们如何在SQL Server中实现这一点?@hims056尝试使用
MAX()
MIN()
。我现在要回家了。过一会儿再来<代码>:)@JW웃 - 你太棒了!谢谢。:)