关于从MySQL触发器中删除别名的帮助
我的问题太简单了(我猜),下面是一个触发器的例子,我正试图删除别名。我不知道我做错了什么,我就是做不好关于从MySQL触发器中删除别名的帮助,mysql,sql,triggers,Mysql,Sql,Triggers,我的问题太简单了(我猜),下面是一个触发器的例子,我正试图删除别名。我不知道我做错了什么,我就是做不好 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 CashMac
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;
以下应该是您正在寻找的内容:
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 ;
为什么需要删除别名?这应该很简单,只要在你看到别名的任何地方使用完整的表名。我想我会赢得StackOverflow上最愚蠢的问题徽章。别担心,我在这方面见过更糟糕的问题。我已经给出了答案,但也许你的努力失败了,因为你的触发器末尾的分隔符与开始时设置的分隔符不匹配?谢谢你的回答。它起作用了。是的,分隔符是错误的,但这是为什么?系统会让我在3分钟内接受你的答案mins@Sampas如果您没有为触发器定义设置不同的分隔符,MySQL就不知道触发器的结束位置,因此它希望在您上次(没有正确分隔)后再设置一个
END
。END
@cypher:谢谢,我也正准备这么说@Sampas:我在末尾添加了一行,以显示正在重置的分隔符;在触发结束后,希望这有助于澄清一些我看到的事情。SoEND@DELIMITER代码>是此项的正确结尾。谢谢again@Sampas:“DELIMITER;”结尾只是重置分隔符。如果省略它,那么将来的查询将期望使用@作为分隔符