Мне нужно использовать оператор Oracle MERGE для обновления записей таблицы. Один из столбцов, который я хотел бы обновить, должен быть получен из значения MAX как существующих записей таблицы, так и записей, которые обновляются как часть текущего оператора MERGE. Как мне это сделать?
при обновлении я попробовал max (значение столбца) в качестве внутреннего запроса, но он не учитывал записи, которые обновляются как часть MERGE.
Ниже представлена примерная таблица.
Вхождение указывает количество комбинаций родительского и дочернего элементов, которые у нас есть.
ИМЯ ТАБЛИЦЫ: Структура
PARENT CHILD OCCURRENCE A M 1 A M 2 A F 1 B M 1
Обратите внимание, что я упомянул только несколько столбцов и записей этой таблицы, чтобы объяснить требование. Я хотел бы обновить родительский элемент «A» до «B». При обновлении трех записей я должен соответствующим образом обновить вхождение. Ниже приведен оператор MERGE, который я пробовал.
MERGE INTO STRUCTURE a
USING (
select 'A' as old_parent,
'B' as new_parent,
child as child from STRUCTURE
) b ON (a.parent = b.old_parent)
WHEN MATCHED THEN
UPDATE SET parent = b.new_parent,
occurrence = (SELECT NVL(MAX(occurrence)) + 1
FROM structure
WHERE parent = b.new_parent and
child = b.child)
Поскольку я записал max(occurrence) как внутренний запрос, я думал, что он будет выполняться каждый раз для каждой записи, поэтому количество событий будет увеличиваться для каждой записи обновления, но этого не произошло.
Ниже ожидаемый результат
PARENT CHILD OCCURRENCE B M 2 B M 3 B F 1 B M 1
Фактический результат, который я получил
PARENT CHILD OCCURRENCE B M 2 B M 2 B F 1 B M 1
Буду признателен за любую помощь/рекомендации о том, как мне добиться этого в одном выражении MERGE. Если это невозможно, есть ли другой способ сделать это с помощью одного оператора в SQL? Спасибо.