Questa sintassi non funzionerà in Oracle SQL.
In Oracle puoi aggiornare un join se le tabelle sono "key-preserved", ovvero:
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
Supponendo che b_pk
è la chiave primaria di b
, qui il join è aggiornabile perché per ogni riga di A c'è al massimo una riga da B, quindi l'aggiornamento è deterministico.
Nel tuo caso, poiché il valore aggiornato non dipende da un'altra tabella, potresti utilizzare un semplice aggiornamento con una condizione EXIST, qualcosa del genere:
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)