Ваш подход предполагает, что столбец ID
является первичным ключом из TABLEA
.
Пожалуйста, проверьте, действительно ли это так, поскольку вам следует позаботиться о таких конструкциях, как:
set VALUE =
(
select VALUE from Table A
where ID = '1'
and TABLE B.AS_OF_DATE < TABLE A.ADD_TIME
)
В случае, если подзапрос возвращает более одной строки, вы сразу увидите
ORA-01427: single-row subquery returns more than one row
Для первичного ключа с поддержкой TABLEA
вы можете использовать простое расширение исходного запроса (добавив предикат WHERE
):
update TABLEB
set VALUE =
(
select VALUE from TableA
where ID = '1'
and TABLEB.AS_OF_DATE < TABLEA.ADD_TIME
)
where TABLEB.AS_OF_DATE < (select ADD_TIME from TABLEA where ID = '1')
Обратите внимание, что проблема с дублированными строками имеет отношение к решению оператора MERGE
, предложенному в другом ответе, которое прекрасно и изящно работает для уникальных ID
в TABLEA
, но не работает с ORA-30926: unable to get a stable set of rows in the source tables
в дублированных ID
s. .