Oracle
 sql >> Database >  >> RDS >> Oracle

Come aggiornare con inner join in Oracle

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)