Sql 如何在Oracle中使用内部联接进行更新
有人能用PL SQL中的更新语句验证内部联接是否有效吗? e、 gSql 如何在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
此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