如何在MySQL触发器中创建复杂的IF条件

时间:2019-02-27 11:15:18

标签: mysql sql triggers database-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语句?

谢谢

3 个答案:

答案 0 :(得分:1)

如果只想在A小于60且节点不是XXX,YYY和ZZZ时插入,则需要使用AND逻辑。试试这个:

IF (A < 60.00 AND NEW.Node <> 'XXX' AND NEW.Node <> 'YYY' AND NEW.Node <> 'ZZZ')

答案 1 :(得分:0)

您是否尝试使用||而不是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

答案 2 :(得分:0)

您似乎想要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扩展)