2012-02-23 8 views

ответ

15

Этот синтаксис не будет работать в Oracle SQL.

В Oracle вы можете иногда обновлять объединения, если таблицы «ключ сохранившийся», а именно:

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 

Предполагая, что b_pk является первичным ключом b, здесь присоединиться к изменяемым, потому что для каждой строки из A есть не более одна строка от B, поэтому обновление детерминировано.

В вашем случае, поскольку обновленное значение не зависит от другой таблицы можно использовать простое обновление с условием EXIST, что-то вроде этого:

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

Вы можете расширить свой ответ включать объяснение вашего кода? Это помогает читателю больше, чем вы могли бы подумать. – gunr2171

+1

«В» ключевое слово не будет работать, если имеется более 1000 записей. Таким образом, этот ответ недействителен. –

Смежные вопросы