Този синтаксис няма да работи в Oracle SQL.
В Oracle можете да актуализирате присъединяване, ако таблиците са "запазени с ключ", т.е.:
UPDATE (SELECT a.val_a, b.val_b
FROM table a
JOIN table b ON a.b_pk = b.b_pk)
SET val_a = val_b
Ако приемем, че b_pk
е първичният ключ на b
, тук присъединяването може да се актуализира, защото за всеки ред от A има най-много един ред от B, следователно актуализацията е детерминирана.
Във вашия случай, тъй като актуализираната стойност не зависи от друга таблица, можете да използвате проста актуализация с условие EXIST, нещо като това:
UPDATE mytable t
SET t.VALUE = 'value'
WHERE EXISTS
(SELECT NULL
FROM tableb b
INNER JOIN tablec c ON c.id = b.id
INNER JOIN tabled d ON d.id = c.id
WHERE t.id = b.id
AND d.key = 1)