我尝试使用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
答案 0 :(得分:5)
首先,我会彻底摆脱这个专栏。它违反了正确数据库设计的最基本规则之一。不要在数据库中复制数据,因为它几乎总是不同步,即使它没有,也需要额外的维护和保养。 非常罕见的情况应该违反这种情况。你的情况几乎肯定不是其中之一,即使你认为是这样。通过适当的索引,不需要该列。
其次,没有必要根据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
答案 1 :(得分:1)
我必须假设您正在尝试更新SumAssessments列,而不是基于它的查询,因此SUM函数不应出现在您的join子句中。您根本不需要加入,尽管这些“总和”列不是一个坏主意,但您可以通过以下方式实现目标:
UPDATE Project set SumAssessments = (
select SUM(Amount) from Assessments where ProjectCode = @ProjectID
)
where ProjectID = @ProjectID