【问题标题】:Trigger that checks if multiple values are equal over two tables and then updates table触发器检查两个表上的多个值是否相等,然后更新表
【发布时间】:2019-12-18 09:12:31
【问题描述】:

我有一种情况,我试图创建一个触发器,一旦我手动更新 table1 中有关游戏编号的特定行,我希望它比较/评估 table1 中已更新的更改(liveResult) 到 table2(prediction) 中的现有值,然后如果这些值是正确的,则需要将 table2(predictionCorrect) 中有关该游戏编号的所有行更新为值“1”,否则值为“0”。

我不是 MySQL 专家,我不断收到以下错误,我无法确定问题所在,当然这可能很简单,但不幸的是我无法发现它......

我已经尝试了一些展示如何执行类似操作的网站,但此时我不断收到以下错误:

"1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 9 行的 '' 附近使用"

不幸的是,我不是 MySQL 专家,之前从未创建过触发器,所以我认为这应该是简单的事情......

CREATE TRIGGER trg_update_tableCorrect
AFTER UPDATE ON table1
FOR EACH ROW BEGIN
IF (liveResult = (Select prediction from table2 where gameNr = '5')) 
THEN
    UPDATE table2
    SET predictionCorrect = '1'
    where gameNr = '5';
ELSE
    UPDATE table2
    SET predictionCorrect = '0'
    where gameNr = '5';
END IF;
END; 

我想要做的就像下面的例子:

Table 1:
gameNr | liveResult
  5    |     10

Table 2:
gameNr | prediction | predictionCorrect
  5    |     10     |         1 // Prediction correct!
  5    |     15     |         0 // Prediction wrong!
  5    |     10     |         1 // Prediction correct!

任何帮助将不胜感激!

【问题讨论】:

  • 检查语法使用旧的,新的方法,顺便说一句,我认为错误是由于您在启动触发器之前没有使用分隔符。
  • @James 会研究一下 old.. 的使用。让我试试分界符,忘记加了..ai...
  • @James 好的,所以分隔符帮助保存了触发器,因此它就位,所以我知道尝试更改 LiveResult 但它似乎没有更新表 2 中的 predictionCorrect ... 会调查这个有点,你很高兴关于评估的 if 语句是正确的?
  • 不,有问题。触发器根据每一行和你的 ifliveresult=value 工作,那么你想要实现什么?

标签: mysql triggers phpmyadmin


【解决方案1】:

感谢@James 的指导。似乎它没有更新的原因是因为虽然我引用了表 1,但在 IF 语句中使用 liveResult 似乎没有被识别,所以我在那里添加了另一个选择,如下所示:

IF ((Select prediction from table1 where gameNr = '5') = (Select liveResult from table2 where gameNr = '5'))

知道这并不理想,但这似乎已经解决了问题,并且至少表格现在正在相应地更新。仍将研究旧方法。

谢谢。

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多