在这里,我的情况与我的触发器有关。我的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语句?
谢谢
答案 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;
我也强烈建议您使用AND
和OR
(它们是SQL中的标准布尔运算符),而不要使用||
和&&
(它们是MySQL扩展)