Cette syntaxe ne fonctionnera pas dans Oracle SQL.
Dans Oracle, vous pouvez mettre à jour une jointure si les tables sont "à clé préservée", c'est-à-dire :
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
En supposant que b_pk
est la clé primaire de b
, ici la jointure est modifiable car pour chaque ligne de A il y a au plus une ligne de B, donc la mise à jour est déterministe.
Dans votre cas, puisque la valeur mise à jour ne dépend pas d'une autre table, vous pouvez utiliser une simple mise à jour avec une condition EXIST, quelque chose comme ceci :
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)