mysql 从另一个表更新表

Posted

技术标签:

【中文标题】mysql 从另一个表更新表【英文标题】:mysql update table from another table 【发布时间】:2011-03-05 13:34:37 【问题描述】:

我正在尝试根据另一个表中另一个字段的总和来更新一个表中的字段。

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。

谢谢!

【问题讨论】:

【参考方案1】:

用途:

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

【讨论】:

对您的查询稍作更新。 WHERE lt.companyid = comp.primary 否则每个 companySize 都将是相同的 :-) 所以我认为不可能用这种语法进行更新? update company_tbl comp, location_tbl loc set companySize = sum(locationSize) where comp.PRIMARY = loc.companyID 只是出于好奇,我喜欢学习新事物 :-) @Idealflip:如果没有表别名(通常在 UPDATE 语句中不接受),那么没有表别名的列引用适用于没有定义任何别名的表。 你应该使用视图。除非您绝对需要针对公司规模的读取进行优化,否则最好每次都计算它。如果您可以从另一列中计算出一列的值,那么您就是在为这两个值不同步的情况做好准备。【参考方案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;

在它处理完每家公司的所有匹配位置后,您将获得所需的总和。

【讨论】:

以上是关于mysql 从另一个表更新表的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表 MySQL 更新地理信息

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

如何从另一个表更新mysql pdo中的字段[重复]

MySQL:从另一个表中更新一个表中的id值

仅当自动增量数据相等时才从另一个表列更新 mysql 列

WordPress 和 SQL - 如果列值不存在,则从另一个表更新和插入