【问题标题】:Help on removing the aliases from a MySQL trigger帮助从 MySQL 触发器中删除别名
【发布时间】:2011-06-23 21:25:55
【问题描述】:

我的问题太简单了(我猜),下面是我试图删除别名的触发器示例。我不知道我做错了什么,我就是做错了。

DELIMITER @
CREATE TRIGGER StartOfShift BEFORE INSERT ON shift
FOR EACH ROW
BEGIN
IF(NEW.CashierCode NOT IN ( SELECT w.EmployeeID FROM WorksOn as w
JOIN shop AS s ON w.ShopID = s.ShopID
JOIN CashMachineCode AS c ON s.ShopID = c.ShopID
WHERE c.CashMachineCode = NEW.CashMachineCode ))
THEN SET NEW.CashierCode = NULL;
END IF;
END;

【问题讨论】:

  • 为什么需要删除别名?它应该就像在您看到别名的任何地方使用完整的表名一样简单。
  • 我想我会赢得 stackoverflow 上最愚蠢的问题徽章
  • 别担心,我在 SO 上看到 个更糟糕的问题。
  • 我已经给出了答案,但可能由于触发器末尾的分隔符与开头的分隔符不匹配,您的努力失败了?

标签: mysql sql triggers


【解决方案1】:

以下应该是您正在寻找的内容:

DELIMITER @
CREATE TRIGGER StartOfShift BEFORE INSERT ON shift
FOR EACH ROW
BEGIN
    IF(NEW.CashierCode NOT IN ( 
        SELECT WorksOn.EmployeeID FROM WorksOn
            JOIN shop ON WorksOn.ShopID = shop.ShopID
            JOIN CashMachineCode ON shop.ShopID = CashMachineCode.ShopID
            WHERE CashMachineCode.CashMachineCode = NEW.CashMachineCode )
    ) THEN 
        SET NEW.CashierCode = NULL;
    END IF;
END@
DELIMITER ;

【讨论】:

  • Cez 谢谢你的回答。有用。是的,分隔符是错误,但为什么会这样?系统,3分钟后让我接受你的回答
  • @Sampas 如果你没有为触发器定义设置不同的分隔符,MySQL 不知道触发器在哪里结束,所以它期待在你的最后一个 END 之后(未正确分隔)@ 987654323@.
  • @cypher:谢谢,我正要说同样的话。 @Sampas:我在末尾添加了一行以显示分隔符被重置为 ;在触发器结束后,希望有助于澄清一些事情
  • 我明白了。所以END@ DELIMITER ; 是正确的结局。再次感谢
  • @Sampas: "DELIMITER ;"最后只是重置分隔符。如果省略,则以后的查询将期望 @ 用作分隔符
猜你喜欢
  • 2012-08-02
  • 2015-01-04
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多