簡體   English   中英

我可以使用觸發器使用另一行的條件更新表中的值嗎?

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

我有一張表格,顯示兩人游戲后玩家的排名。 表看起來像:

播放器 上一個_排名
一個 954 977
1023 1000
C 1005 1015

我想創建第四列,其值在每行輸入后根據誰在玩誰而更新

因此,如果玩家 A 正在玩玩家 c,我希望顯示這些值

播放器 上一個_排名 對手排名
一個 954 977 1015
1023 1000 無關緊要的
C 1005 1015 977

我試過下面的觸發器,它不起作用,也不允許我的表有任何額外的條目

CREATE TRIGGER opp_rank_update 
BEFORE INSERT INTO stats
FOR EACH ROW

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

此觸發器正在引用另一個具有原始數據的表:

優勝者 W_Score 失敗者 L_Score
一個 21 18
21 C 15
一個 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

子查詢(公共表表達式 - cte)提取排名之間的差異,然后我們可以對上一個查詢的結果應用自連接來匹配具有負差異的玩家。

對於三個玩家來說,這會很好。

在這里試試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM