使用过滤更新另一个表中的记录

时间:2017-10-03 10:30:14

标签: mysql

我不是MySQL的专家,而且我遇到了一个我不知道如何解决的问题。

我有两张桌子。

Table `players`
id | name | high_score
---|------|-----------
1  | john | -
2  | mary | -
3  | mike | -

Table `scores`
id | id_player | score
---|-----------|------
1  | 1         | 12
2  | 1         | 5
3  | 3         | 8
4  | 2         | 7
5  | 2         | 25
6  | 3         | 18

这听起来很愚蠢,但我想根据第二张桌子上的最大值更新第一张桌子的高分记录。

我到达了这个不完整的解决方案:

UPDATE `productos_players` p INNER JOIN `scores` s ON (p.id = s.id_player) SET p.high_score=s.score

这是我到目前为止所做的,但我仍然需要修改scores的查询以获得最大MAX()并将其限制为1个结果或类似的结果,但我不是&# 39;不知道怎么做,或者即使有可能。

感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下UPDATE来更新高分:

UPDATE `players` p 
SET p.high_score = (
    SELECT MAX(score) 
    FROM scores 
    WHERE id_player = p.id
);
  

演示: http://sqlfiddle.com/#!9/7320c3/2/0

另一种解决方案是使用VIEW

CREATE VIEW v_players AS
    SELECT players.*, MAX(scores.score) AS 'high_score' 
    FROM players LEFT JOIN scores ON players.id = scores.id_player 
    GROUP BY players.id

使用VIEW的好处是不会在每次更改scores表后更新表。

如何使用TRIGGER自动使用UPDATE
UPDATE的{​​{1}},TRIGGERUPDATE之后INSERTUPDATE表格上可以使用DELETE查询表,自动:

scores