Как создать сложное условие IF в MySQL Trigger - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть ситуация с моим триггером здесь.Мое утверждение 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), триггер работает отлично.

Вопрос в том, как сделать оператор IF с большим количеством ИЛИ ?

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Если вы хотите вставить, только когда A меньше 60, а узел не XXX, YYY и ZZZ, вам нужно использовать логику AND.Попробуйте это:

IF (A < 60.00 AND NEW.Node <> 'XXX' AND NEW.Node <> 'YYY' AND NEW.Node <> 'ZZZ')
0 голосов
/ 27 февраля 2019

Вы, похоже, хотите 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.

0 голосов
/ 27 февраля 2019

Вы пытались использовать || вместо 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...