sql >> Base de Datos >  >> RDS >> Oracle

Cómo actualizar con unión interna en Oracle

Esta sintaxis no funcionará en Oracle SQL.

En Oracle, puede actualizar una unión si las tablas están "conservadas por clave", es decir:

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

Suponiendo que b_pk es la clave principal de b , aquí la combinación es actualizable porque para cada fila de A hay como máximo una fila de B, por lo tanto, la actualización es determinista.

En su caso, dado que el valor actualizado no depende de otra tabla, podría usar una actualización simple con una condición EXISTE, algo como esto:

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)