MySQL: синтаксическая ошибка при создании триггера - PullRequest
0 голосов
/ 14 ноября 2018

Я просто пытаюсь вставить строку в родительскую таблицу, если строка не существует в родительской таблице.В строке "INSERT INTO" появляется сообщение "Заявление неполное. Ожидается"; ".

CREATE TRIGGER SellsInsertAlcoholAdd 
AFTER INSERT ON Sells
FOR EACH ROW
BEGIN
    IF(NEW.`Alcohol name` NOT IN
        (SELECT `Alcohol name` FROM Alcohol))
    THEN INSERT INTO Alcohol VALUES(NEW.`Alcohol Name`, NEW.`Type`, NEW.ABV, NEW.Manufacturer);
    END IF;
END

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Кроме того (в дополнение к ответу Мадхура) вам не нужно ничего из IF. Просто сделай INSERT IGNORE .... (Предполагается, что Alcohol name равно UNIQUE или PRIMARY.)

0 голосов
/ 14 ноября 2018

Вы без необходимости получаете все значения Alcohol name, а затем проверяете значение NEW внутри него.Вместо этого вы можете изменить на NOT EXISTS().

. Вам также нужно изменить DELIMITER на что-то другое (кроме ;) в начале.В конце переопределите его обратно к ;

DELIMITER $$
CREATE TRIGGER SellsInsertAlcoholAdd 
AFTER INSERT ON Sells
FOR EACH ROW
BEGIN
    IF NOT EXISTS(SELECT 1 FROM Alcohol 
                  WHERE `Alcohol name` = NEW.`Alcohol name`) THEN
      INSERT INTO Alcohol 
      VALUES(NEW.`Alcohol Name`, NEW.`Type`, NEW.ABV, NEW.Manufacturer);
    END IF;
END $$
DELIMITER ;
...