如何在 MySQL 触发器中创建复杂的 IF 条件
How to create Complex IF Condition in MySQL Trigger
我这里的触发器有问题。我的 IF 语句不能正常工作。我被卡住了,花了很多时间试图解决它。
这是我的代码:
CREATE DEFINER=`administrator`@`%` TRIGGER `My_Trigger` AFTER INSERT ON `my_first_table` FOR EACH ROW BEGIN
DECLARE A FLOAT default 0;
SET A = NEW.Data;
IF (A < 60.00 && NEW.Node <> 'XXX') OR (A < 60.00 && NEW.Node <> 'YYY') OR (A < 60.00 && NEW.Node <> 'ZZZ')
THEN
INSERT INTO `my_database`.`my_table` VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
END
所以,如果我只使用一个节点(不在 if 语句中使用 OR),触发器工作正常。
问题是,如何用很多OR来制作IF语句?
谢谢
您是否尝试过使用 ||
而不是 OR
或尝试封装三个条件。
试试下面的例子是否适合你。
IF (A < 60.00 AND (NEW.Node <> 'XXX' OR NEW.Node <> 'YYY' OR NEW.Node <> 'ZZZ'))
THEN
INSERT INTO `my_database`.`my_table` VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
END
如果只想在A小于60时插入,且节点不是XXX、YYY、ZZZ,则需要改用AND
逻辑。试试这个:
IF (A < 60.00 AND NEW.Node <> 'XXX' AND NEW.Node <> 'YYY' AND NEW.Node <> 'ZZZ')
你似乎想要NOT IN
:
IF (A < 60.00 AND NEW.Node NOT IN ('XXX', 'YYY', 'ZZZ')) THEN
INSERT INTO `my_database`.`my_table`
VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
我也强烈建议您使用 AND
和 OR
-- 这是 SQL 中的标准布尔运算符 -- 而不是 ||
和 &&
是 MySQL 个扩展名。
我这里的触发器有问题。我的 IF 语句不能正常工作。我被卡住了,花了很多时间试图解决它。
这是我的代码:
CREATE DEFINER=`administrator`@`%` TRIGGER `My_Trigger` AFTER INSERT ON `my_first_table` FOR EACH ROW BEGIN
DECLARE A FLOAT default 0;
SET A = NEW.Data;
IF (A < 60.00 && NEW.Node <> 'XXX') OR (A < 60.00 && NEW.Node <> 'YYY') OR (A < 60.00 && NEW.Node <> 'ZZZ')
THEN
INSERT INTO `my_database`.`my_table` VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
END
所以,如果我只使用一个节点(不在 if 语句中使用 OR),触发器工作正常。
问题是,如何用很多OR来制作IF语句?
谢谢
您是否尝试过使用 ||
而不是 OR
或尝试封装三个条件。
试试下面的例子是否适合你。
IF (A < 60.00 AND (NEW.Node <> 'XXX' OR NEW.Node <> 'YYY' OR NEW.Node <> 'ZZZ'))
THEN
INSERT INTO `my_database`.`my_table` VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
END
如果只想在A小于60时插入,且节点不是XXX、YYY、ZZZ,则需要改用AND
逻辑。试试这个:
IF (A < 60.00 AND NEW.Node <> 'XXX' AND NEW.Node <> 'YYY' AND NEW.Node <> 'ZZZ')
你似乎想要NOT IN
:
IF (A < 60.00 AND NEW.Node NOT IN ('XXX', 'YYY', 'ZZZ')) THEN
INSERT INTO `my_database`.`my_table`
VALUES ('Data 1', 'Data 2', 'Data 3', 'Data 4', NEW.Node, A);
END IF;
我也强烈建议您使用 AND
和 OR
-- 这是 SQL 中的标准布尔运算符 -- 而不是 ||
和 &&
是 MySQL 个扩展名。