mysql从另一个表更新表
问题描述:
我试图从另一个表中的另一个字段的总和更新一个表中的一个字段。mysql从另一个表更新表
company_tbl(PRIMARY,companySize,公司名称) 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。
谢谢!
答
用途:
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
答
首先初始化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;
在您为每家公司处理完所有匹配位置之后,您会得到所需的金额。
对您的查询进行一些更新。 WHERE lt.companyid = comp.primary 否则每companySize将是相同的:-) 所以我把它这是不可能做到的更新与此语法? 更新company_tbl补偿,location_tbl禄 集companySize = SUM(locationSize) 其中comp.PRIMARY = loc.companyID 只是出于好奇,我喜欢学习新的东西:-) – Kukoy 2010-06-18 18:15:27
@Idealflip:如果没有表的别名(一般在UPDATE语句中不被接受),那么没有表别名的列引用适用于没有定义任何别名的表。 – 2010-06-18 18:17:31
您应该使用该视图。除非您绝对需要针对公司规模的读取进行优化,否则最好每次计算一次。如果您可以计算另一列中的某一列的值,则可以设置自己的状态,以使两个值不同步。 – Kendrick 2010-06-18 18:23:27