有人可以验证内部连接对PL SQL中的UPDATE语句是否有效吗?例如
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
该synthax在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 最多 只有一行,因此该更新是确定性的。
b_pk
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)