我有以下两个表(简化架构):
score
-----
id
score
score_history
-------------
id
score_id (foreign key with score table)
score
我正在定期填充score_history表。我想更新分数表中的每一行,分数列基于score_history中与最大ID号相关联的分数。
一个例子可能是:
score entries
+----+-------+
| id | score |
+----+-------+
| 1 | 0 |
| 2 | 0 |
+----+-------+
score_history entries
+----+----------+-------+
| id | score_id | score |
+----+----------+-------+
| 1 | 1 | 15 |
| 2 | 2 | 10 |
| 3 | 1 | 14 |
| 4 | 2 | 11 |
+----+----------+-------+
在score_history中存在3/4条目之前,我想在一个请求中将得分表中的得分更新为以下内容:
+----+-------+
| id | score |
+----+-------+
| 1 | 15 |
| 2 | 10 |
+----+-------+
在score_history中插入3/4条目后,我再次希望我的分数表具有相同的请求:
+----+-------+
| id | score |
+----+-------+
| 1 | 14 |
| 2 | 11 |
+----+-------+
我尝试了多项内容(例如https://stackoverflow.com/a/9396897/916630)但无法取得成功。
有什么想法吗?
答案 0 :(得分:1)
UPDATE score s
SET score =
(SELECT score FROM score_history sh WHERE sh.score_id = s.ID ORDER BY SH.id ASC LIMIT 1)
答案 1 :(得分:1)
update score
join score_history on score.id = score_history.score_id
join
(select score_id, max(id) mid
from score_history
group by score_id) t
on score_history.id = t.mid
set score.score = score_history.score
首先获取历史记录表中每个score_id的max(history_id)。
然后使用max id加入历史记录。
最后加入得分表并将得分列设置为具有最大ID
的得分答案 2 :(得分:1)
如果您正在寻找更新命令,可以将其作为
update
score s
join score_history sh on sh.score_id = s.id
join (
select max(id) as max_id, score_id from score_history group by score_id
)x on x.max_id = sh.id and x.score_id = sh.score_id
set s.score = sh.score ;