2012-02-23 9 views
8

¿Podría alguien verificar si la unión interna es válida con la declaración ACTUALIZACIÓN en PL SQL? p.Cómo actualizar con unión interna en Oracle

Update table t 
set t.value='value' 
from tableb b inner join 
on t.id=b.id 
inner join tablec c on 
c.id=b.id 
inner join tabled d on 
d.id=c.id 
where d.key=1 

Respuesta

15

Este synthax no funcionará en Oracle SQL.

En Oracle a veces se puede actualizar una unión si las tablas son "conservada 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 primaria de b, aquí la unió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 ya que el valor actualizado no depende de otra mesa se puede utilizar una simple actualización con una condición de existir, 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) 
0
update t T 
set T.value = 'value' 
where T.id in (select id from t T2, b B, c C, d D 
       where T2.id=B.id and B.id=C.id and C.id=D.id and D.key=1) 

-- t is the table name, T is the variable used to reffer to this table 
+1

¿Puede ampliar su respuesta para incluir una explicación de tu código? Le ayuda al lector más de lo que piensas. – gunr2171

+1

la palabra clave 'in' no funcionará si hay más de 1000 registros. Entonces esta respuesta no es válida. –

Cuestiones relacionadas