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