Я считаю, что с помощью оператора MERGE
такого рода вещи намного проще, чем с оператором UPDATE
. Причина в том, что вы можете написать запрос к SELECT
строкам так, как вы хотите, чтобы они смотрели после операции, а затем использовать этот SELECT
в качестве источника строки для вашего MERGE
, чтобы это произошло.
Я не потрудился создать структуру вашей таблицы в моей базе данных (CREATE TABLE
DDL с INSERTs
было бы неплохо при публикации вопроса), поэтому здесь могут быть опечатки / синтаксические ошибки, но это должно сработать:
MERGE INTO table2 t2
USING (
SELECT * FROM (
SELECT t2.rowid t2_row_id,
row_number() over ( partition by t1.emp_id
order by t2.start_date ) rn,
t1.creation_date new_start_date
FROM table1 t1
INNER JOIN table2 t2 ON t2.emp_id = t1.emp_id
) WHERE rn = 1
) u
ON ( t2.rowid = u.t2_row_id )
WHEN MATCHED THEN UPDATE SET t2.start_date = u.new_start_date;