2012-02-23 71 views
8

有人可以驗證內部連接是否對PL SQL中的UPDATE語句有效? 例如如何使用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 

回答

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_pkb主鍵,這裏的加入是可更新的,因爲每一行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

你可以擴展你的答案包括:你的代碼的解釋?它比讀者想象的更能幫助讀者。如果有超過1000條記錄, – gunr2171 2014-10-08 17:01:31

+1

'in'關鍵字將不起作用。所以這個答案是無效的。 – 2015-03-04 06:11:43