我可以使用触发器使用另一行的条件更新 table 中的值吗?

Can I use a trigger to update a value in a table using criteria from another row?

我有一个 table 可以显示两人游戏后玩家的排名。 Table 看起来像:

Player Rank Previous_rank
A 954 977
B 1023 1000
C 1005 1015

我想创建第四列,其值在每行输入后根据谁在玩谁进行更新

所以如果玩家 A 接下来要玩玩家 c,我希望显示这些值

Player Rank Previous_rank opponent_rank
A 954 977 1015
B 1023 1000 irrelevant
C 1005 1015 977

我已经尝试了下面的触发器,它不起作用,并且也不允许对我的 tables

进行任何额外的输入

创建触发器opp_rank_update 在插入统计数据之前

每行

更新排名

SET opponent_rank = SELECT (SELECT previous_rank FROM rank WHERE player = new.winner)

WHERE 玩家 = new.loser

此触发器正在引用另一个具有原始数据的 table:

Winner W_Score Loser L_Score
A 21 B 18
B 21 C 15
A 21 C 16

您可以尝试使用以下查询:

WITH cte AS(
    SELECT *, 0+`Rank` - `Previous_rank`   AS diff
    FROM tab
)
SELECT t1.`Player`,
       t1.`Rank`,
       t1.`Previous_rank`,
       COALESCE(t2.`Rank`, 'irrelevant') AS opponent_rank
FROM      cte t1
LEFT JOIN cte t2
       ON t1.player <> t2.player
      AND t1.diff < 0 
      AND t2.diff < 0
ORDER BY t1.Player

子查询(常用table表达式-cte)提取排名之间的差异,然后我们可以对上一个查询的结果进行自连接,以匹配具有负差异的玩家。

对于三个玩家,这会很好。

试试看 here.