Вариант А) Коррелированный подзапрос
UPDATE MyTable t
SET Col1 = (SELECT o.col2 FROM OtherTable o WHERE t.OtherID = o.ID)
Для этого требуется, чтобы подзапрос возвращал не более 1 совпадения для каждой строки в обновляемой таблице. Если он не найдет совпадений, столбец будет обновлен до NULL
, что может быть не тем, что вы хотите. Вы можете добавить WHERE EXISTS (SELECT o.col2 FROM OtherTable o WHERE t.OtherID = o.ID)
, чтобы обновление происходило только при обнаружении совпадения.
Вариант Б) Обновление вида объединения
UPDATE (SELECT t.col1, o.col2 FROM MyTable t JOIN OtherTable o ON t.otherID = o.ID)
SET col1 = col2
Это ближе к тому, что вы привыкли делать. Это будет работать только в том случае, если Oracle сможет определить уникальную строку в базовой таблице для каждой строки в соединении, что, как я думаю, в основном означает, что ID
должен быть уникальным ключом otherTable
.