Я хочу обновить целевую таблицу (target
) в соответствии со строками в исходной таблице (source
). Для этого я использую оператор MERGE
. Тем не менее, я хотел бы, чтобы вся операция MERGE
не выполнялась при некоторых условиях, но не могу понять, как это сделать.
Пример
Таблица target
содержит:
id
==
1
2
Таблица source
содержит:
id | operation
==============
3 | ADD
4 | DELETE
Ожидается target
таблица после MERGE
(я не хочу каких-либо обновлений здесь, потому что 4
соответствует операции DELETE
, и поскольку в * 1026 нет строки 4
* таблица, это считается ошибкой и MERGE
должно произойти сбой атомарно):
id
==
1
2
На данный момент я использую следующий запрос:
MERGE `target` target
USING `source` source
ON target.id = source.id
WHEN not matched AND source.operation = "ADD" THEN
INSERT (id)
VALUES (source.id)
Но, очевидно, я получил:
id
==
1
2
3
Можно ли добавить в мой запрос следующее предложение:
WHEN not matched AND source.operation = "DELETE" THEN ERROR("...")
Это не работает (ERROR
неожиданно):
Синтаксическая ошибка: ожидаемое ключевое слово DELETE, ключевое слово INSERT или ключевое слово UPDATE, но есть идентификатор "ERROR"
Если это невозможно с запросом MERGE
, есть ли способ переписать его в аналогичный запрос, чтобы атомарно обновить мою таблицу target
, как я ожидаю?