SQL: нераспознанный оператор рядом с условным выражением (IF)

Я никогда раньше не использовал IF в SQL. Мне нужно обновить строку, где учреждение — это определенный номер, если он существует, и вставить его, если это не так. Чтобы избежать использования сначала выбора, а затем вставки или обновления, я хотел попробовать свои силы в операторе IF. Из того, что я прочитал в документации, я понял, что это должно быть примерно так:

IF (NOT EXISTS(SELECT evaluations FROM tEvaluations WHERE institution = 0))
BEGIN 
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END 
ELSE 
BEGIN 
    UPDATE tEvaluations SET evaluations = 10 WHERE institution = 0
END

Однако я получаю эту ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END' at line 2

Я пытаюсь запустить этот запрос в phpmyadmin, чтобы проверить, каким должен быть запрос.


person aarelovich    schedule 13.05.2020    source источник
comment
Какие СУБД вы используете?   -  person jarlh    schedule 13.05.2020
comment
@jarlh phpmyadmin реализует MySQL, но это может быть устаревшая версия MySQL 5 или современная MySQL 8, которые сильно отличаются друг от друга.   -  person Dai    schedule 13.05.2020
comment
@jarlh Я предполагаю, что MySQL просматривает сообщение об ошибке проверьте руководство, соответствующее вашему серверу MariaDB   -  person Rahul    schedule 13.05.2020
comment
Я использую MariaDB   -  person aarelovich    schedule 13.05.2020


Ответы (1)


У вас не может быть блока if..else в обычном операторе SQL, если только он не находится внутри процедурного блока. Мне кажется, что вы ищете INSERT ON DUPLICATE KEY UPDATE нравится

INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
ON DUPLICATE KEY UPDATE evaluations = 10;

Согласно документации, для любого из ваших столбцов должно быть определено ограничение UNIQUE. Цитата из документации

Если вы укажете предложение ON DUPLICATE KEY UPDATE и вставляемая строка приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY, произойдет ОБНОВЛЕНИЕ старой строки. Например, если столбец a объявлен как UNIQUE и содержит значение 1

person Rahul    schedule 13.05.2020
comment
Я запускаю ваш запрос дважды. Просто так, и он дважды вставил (0,0). Вместо того, чтобы только один раз, а затем обновить. Нужно ли мне создавать ограничение, что учреждение, оценки являются уникальной парой или что-то в этом роде? - person aarelovich; 13.05.2020
comment
@aarelovich Да, см. редактирование в ответе и, кроме того, проверьте документацию, указанную в ответе, для получения более подробной информации. - person Rahul; 13.05.2020