如何在 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;

我也强烈建议您使用 ANDOR -- 这是 SQL 中的标准布尔运算符 -- 而不是 ||&& 是 MySQL 个扩展名。