来自另一个表的mysql更新表

时间:2010-06-18 18:06:35

标签: mysql sql aggregate-functions mysql-error-1111

我正在尝试更新另一个表中另一个字段之和的表中的字段。

company_tbl(PRIMARY,companySize,companyName) location_tbl(PRIMARY,companyID,locationSize,locationName)

这两个表通过company_tbl.PRIMARY链接= location_tbl.companyID

update company_tbl comp, location_tbl loc
set companySize = sum(locationSize)
where comp.PRIMARY = loc.companyID

我收到“无效使用群组功能”的错误

公司可以有多个地点

我想做的是什么?我想获取属于特定公司的位置总和,并用总和更新companySize。

谢谢!

2 个答案:

答案 0 :(得分:9)

使用:

UPDATE company_tbl comp
   SET companySize = (SELECT SUM(lt.locationSize)
                        FROM location_tbl lt
                       WHERE lt.companyid = comp.primary)

... or you could use a view,包含:

   SELECT c.primary,
          COALESCE(SUM(lt.locationsize), 0) AS companysize
     FROM company_tbl c
LEFT JOIN location_tbl lt ON lt.companyid = c.primary

答案 1 :(得分:2)

首先将companySize初始化为零:

UPDATE company_tbl SET companySize = 0; 

然后,对于每个匹配的位置行,添加locationSize:

UPDATE company_tbl comp JOIN location_tbl loc ON comp.PRIMARY = loc.companyID
SET comp.companySize = comp.companySize + loc.locationSize;

您在处理每家公司的所有匹配位置时获得所需的金额。