Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Oracle中使用内部联接进行更新_Sql_Oracle - Fatal编程技术网

Sql 如何在Oracle中使用内部联接进行更新

Sql 如何在Oracle中使用内部联接进行更新,sql,oracle,Sql,Oracle,有人能用PL SQL中的更新语句验证内部联接是否有效吗? e、 g 此Syntax无法在Oracle SQL中工作 在Oracle中,即: 假设b_pk是b的主键,这里连接是可更新的,因为对于A的每一行,b最多有一行,因此更新是确定的 在您的情况下,由于更新的值不依赖于另一个表,您可以使用带有EXIST条件的简单更新,如下所示: UPDATE mytable t SET t.VALUE = 'value' WHERE EXISTS (SELECT NULL

有人能用PL SQL中的更新语句验证内部联接是否有效吗? e、 g


此Syntax无法在Oracle SQL中工作

在Oracle中,即:

假设
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)

你能扩展你的答案,包括对你的代码的解释吗?它对读者的帮助比你想象的要多。如果记录超过1000条,“in”关键字将不起作用。所以这个答案是无效的。
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
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)
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