Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment mettre à jour avec une jointure interne dans Oracle

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)