sql – 如何使用Oracle中的内部联接进行更新

有人可以验证内部联接是否对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中最多有一行,因此更新是确定性的.

在您的情况下,由于更新的值不依赖于另一个表,您可以使用具有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)

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...