我有2张桌子 - 主人和细节。这是主人和细节之间的一对多关系。
在许多其他列中,master table
具有:
id column (index)
total column
在许多其他列中,details table
具有:
id column (index)
value column
SQL UPDATE语句可以将这两个表连接在一起,UPDATE master.total with the sum of details.value where master.id = details.id
谢谢你的帮助。
答案 0 :(得分:3)
看起来像:
UPDATE
master m
INNER JOIN
(
SELECT d.id, SUM(d.value) AS valueSum
FROM details
GROUP BY d.id
) AS g
ON m.id = g.id
SET m.total = g.valueSum
答案 1 :(得分:3)
update master as m
set total=
(select sum(value) from detail as d where d.id=m.id)
答案 2 :(得分:1)
这是我的最终SELECT语句最终看起来像:
// update all scored nominations "total score" and "average score" for current year where nomination approved and not locked
mysql_query('
UPDATE nomination_bak AS nomination
SET
nomination_score = (
SELECT SUM(total_score)
FROM essayScores_bak AS essayScores
WHERE essayScores.nomination_sequence = nomination.nomination_sequence AND essayScores.nomination_year = nomination.nomination_year
),
nomination_average = (
SELECT AVG(total_score)
FROM essayScores_bak AS essayScores
WHERE essayScores.nomination_sequence = nomination.nomination_sequence AND essayScores.nomination_year = nomination.nomination_year AND essayScores.total_score > "0"
)
WHERE nomination.nomination_year = "' . NOMINATION_YEAR . '" AND nomination.nomination_approved = "Y" AND nomination.nomination_locked = "N"
') or die('tallyScores(nominationTable): ' . mysql_error());
每个表的“_bak”部分只是显示我在我的表的备份副本上测试了它。