MariaDB выполняет ОБНОВЛЕНИЕ, а затем УДАЛИТЬ, если условие выполняется - PullRequest
0 голосов
/ 02 марта 2020

Я пишу приложение Node JS и должен выполнить UPDATE и DELETE запросы в одном и том же выражении, но DELETE следует выполнять в другой таблице и только в том случае, если условие равняется определенному состоянию. Я не уверен в своем синтаксисе ... Вот что у меня есть:

UPDATE vm_log SET user_id_fk = (SELECT user_id FROM users WHERE username = ?), vm_state = ? WHERE vm_id = ?;
SET @vmState = ?;
IF @vmState = 'PERMANENT' THEN
DELETE FROM vm_ext_tracking WHERE vm_fk = ?;
END IF

Где ? поставляются как параметры. Например, username = 'someUser', vm_state = 'ACTIVE' или PERMANENT, а vm_id - некоторое число: vm_id = 4303. UPDATE часть отлично работает отдельно, просто нужно добавить слой сложности с DELETE. Я получаю сообщение об ошибке:

#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 'IF @vmState = 'PERMANENT' THEN
DELETE FROM vm_ext_tracking WHERE vm_fk = 4303' at line 1

1 Ответ

1 голос
/ 02 марта 2020
UPDATE vm_log 
SET user_id_fk = ( SELECT user_id 
                   FROM users 
                   WHERE username = ?), 
    vm_state = ? 
WHERE vm_id = ?;

SET @vmState = ?;

DELETE 
FROM vm_ext_tracking 
WHERE vm_fk = ?
  AND @vmState = 'PERMANENT';

PS. @vmState является избыточным, если вам не нужно указывать код ниже (не показан), который вы можете использовать

UPDATE vm_log 
SET user_id_fk = ( SELECT user_id 
                   FROM users 
                   WHERE username = ?), 
    vm_state = ? 
WHERE vm_id = ?;

DELETE 
FROM vm_ext_tracking 
WHERE ? = 'PERMANENT'
  AND vm_fk = ?;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...