使用内连接和聚合函数更新列

Posted

技术标签:

【中文标题】使用内连接和聚合函数更新列【英文标题】:Update Column Using Inner Join and Aggregate Function 【发布时间】:2015-06-24 09:54:00 【问题描述】:

我有一个表,我需要使用另一个表中指定值的总和来更新它。需要更新的表名为 EngTasks,其中包含一个名为 RunStatus 的字段。 RunStatus 可以保存 3 个值:

1 = 未开始 2 = 进行中 3 = 完成

我需要查看的表名为 EngTaskLog,其中包含名为 HoursApplied 的字段和名为 EngTaskID 的外键时间>。对于每条记录,我需要查看 EngTaskLog 中的所有记录,并合计所有 HoursApplied 其中 EngTaskID = ID EngTasks 记录需要更新。

我一时兴起尝试了以下查询,但出现错误:

UPDATE EngTasks
SET EngTasks.RunStatus = 1
FROM EngTasks ET
INNER JOIN
    EngTaskLog ETL
ON
    SUM(ETL.HoursApplied) = 0

我没有丰富的查询经验,所以上面的代码对于有更多经验的人来说可能看起来很荒谬。

我希望以上内容有意义,感谢您的时间和帮助。

【问题讨论】:

RunStatus 是如何确定的?您想简单地更新每个 EngTaskID 的总小时数还是这里有更复杂的东西? 【参考方案1】:
    UPDATE ET
    SET ET.RunStatus = 1
    FROM EngTasks ET
    INNER JOIN (
        SELECT ETL.EngTaskID, SUM(ETL.HoursApplied) s
        FROM EngTasks ET
        INNER JOIN EngTaskLog ETL ON ET.ID = ETL.EngTaskID 
        GROUP BY ETL.EngTaskID
        HAVING SUM(ETL.HoursApplied) = 0 ) x ON ET.ID = x.EngTaskID

【讨论】:

感谢您的回复。我尝试了查询并收到以下错误:"Msg 8120, Level 16, State 1, Line 7 Column 'EngTaskLog.EngTaskID' 在选择列表中无效,因为它不包含在聚合函数或 GROUP 中BY 子句。” 效果很好。谢谢您的帮助。干得好。

以上是关于使用内连接和聚合函数更新列的主要内容,如果未能解决你的问题,请参考以下文章

pandas编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和

在 codeigniter 中使用聚合函数更新列

结合左外连接和内连接 + 聚合函数 - 空结果集问题

SQL——连接查询聚合函数开窗函数

MySQL 数据库聚合查询和联合查询操作

SQL学习笔记 ----Mysql数据库的条件查询