MySQL触发器执行出错

时间:2016-04-27 22:18:21

标签: mysql triggers sql-update

所以我有这个触发器:

CREATE TRIGGER `onUpdatePlayerTracker` AFTER UPDATE ON `playtracker`
FOR EACH ROW UPDATE players
SET deckplayedmost = (SELECT deckname 
                  FROM playTracker 
                  WHERE playerID =  old.playerID
                  AND  amount =  (SELECT max(amount)
                                    FROM playtracker
                                    WHERE playerID = old.playerID
                                    LIMIT 1))
,

deckplayedleast =(SELECT deckname 
                  FROM playTracker 
                  WHERE playerID =  old.playerID
                  AND  amount = (SELECT min(amount)
                                    FROM playtracker
                                    WHERE playerID = old.playerID
                                    LIMIT 1))

当我尝试更新 playtracker

PLAYTRACKER
PlayerID DeckName   Amount
    6     Space        1
    4     Space        0
    3     Space        1
    5     Space        2
    2     Space        1
    1     Space        3
    6     Sky          3
    5     Sky          1
    4     Sky          2
    2     Sky          0
    1     Sky          3
    3     Sky          1
    5     Ocean        3
    4     Ocean        3
    3     Ocean        0
    1     Ocean        8
    2     Ocean        4
    6     Ocean        2
    3     Mystic       2
    2     Mystic       3
    5     Mystic       2
    6     Mystic       4
    4     Mystic       1
    1     Mystic       1
    4     Forest       1
    6     Forest       5
    5     Forest       2
    3     Forest       1
    2     Forest       2
    1     Forest       3
    6     Desert       3
    5     Desert       4
    4     Desert       2
    3     Desert       1
    2     Desert       3
    1     Desert       2

哪个应该触发触发器,我收到错误,说更新无法完成,因为结果包含多行。它没有指定多次返回的来源。它应该更新下面的玩家表。

Players
PlayerID    PlayerName  DeckPlayedMost  DeckPlayedLeast     FavCardType     
1            Daniel     Ocean           Mystic              Duel
2            Gavin      Ocean           Mystic              Event
3            Patrick    Ocean           Mystic              Exchange
4            Joe        Ocean           Mystic              Attack
5            George     Ocean           Mystic              Event
6            Robert     Ocean           Mystic              Rares

此文字包含在内,因为我的帖子包含太多代码而且说明不够。就像我认为我提供了足够的解释,我知道它可能更好,更详细,但不是什么,但我是新手。坦率地说,我仍然对人们回复感到惊讶!我的意思是我非常感激,学习可以是一个如此艰难的挑战,是对自我的真正考验,我感谢你们所有人的帮助。使它的压力更容易管理。

1 个答案:

答案 0 :(得分:1)

这将消除该错误,但我没有看到你的查询是否正确。

SET deckplayedmost = (SELECT deckname 
                  FROM playTracker 
                  WHERE playerID =  old.playerID
                  AND  amount =  (SELECT max(amount)
                                    FROM playtracker
                                    WHERE playerID = old.playerID
                                    LIMIT 1)
                  LIMIT 1)
,

deckplayedleast =(SELECT deckname 
                  FROM playTracker 
                  WHERE playerID =  old.playerID
                  AND  amount = (SELECT min(amount)
                                    FROM playtracker
                                    WHERE playerID = old.playerID
                                    LIMIT 1)
                  LIMIT 1)