Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como atualizar com junção interna no Oracle


Esta sintaxe não funcionará no Oracle SQL.

No Oracle, você pode atualizar uma junção se as tabelas forem "preservadas por chave", ou seja:
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

Supondo que b_pk é a chave primária de b , aqui a junção é atualizável porque para cada linha de A há no máximo uma linha de B, portanto, a atualização é determinística.

No seu caso, como o valor atualizado não depende de outra tabela, você pode usar uma atualização simples com uma condição EXIST, algo assim:
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)