我正在尝试使用join语句更新表,但它并没有完全解决.我需要能够使用来自不同表的数据在一个条件为真时更新数据库中的某一行.这是我到目前为止所做的,也许我很亲密,有人可以提供一些见解?
UPDATE Project
SET Project.SumAssessments = SUM (Assessment.Amount)
FROM Project
JOIN Assessment ON Project.SumAssessments = SUM (Assessment.Amount)
WHERE Assessment.ProjectCode = @ProjectID
AND Project.ProjectID = @ProjectID
Run Code Online (Sandbox Code Playgroud)
首先,我会彻底摆脱这个专栏.它违反了正确数据库设计的最基本规则之一.不要在数据库中复制数据,因为它几乎总是不同步,即使它没有,也需要额外的维护和保养.有非常罕见的情况下,这应该被侵犯.你的情况几乎肯定不是其中之一,即使你认为是这样.通过适当的索引,不需要该列.
其次,没有必要在评估表的基础上加入SUM.您已经根据项目代码加入了,您只是没有将这个条件放在ON它所属的子句中.更好的是,您可以使用子查询来避免需要GROUP BY.由于您使用的是我认为的主键(ProjectId),因此子查询应该可以正常运行.
UPDATE Project
SET Project.SumAssessments = (
SELECT SUM (Assessment.Amount)
FROM Assessment
WHERE ProjectCode = @ProjectID
)
FROM Project
WHERE Project.ProjectID = @ProjectID
Run Code Online (Sandbox Code Playgroud)