带有内部联接的 Oracle 更新语句
Posted
技术标签:
【中文标题】带有内部联接的 Oracle 更新语句【英文标题】:Oracle Update statement with an Inner Join 【发布时间】:2011-12-01 15:13:19 【问题描述】:我正在尝试使用内部连接编写一个简单的更新语句,但我在 SQL Server 中执行此操作的方式似乎不适用于 ORACLE。这是更新:
UPDATE D
SET D.USER_ID = C.USER_ID
FROM D INNER JOIN C
ON D.MGR_CD = C.MGR_CD WHERE D.USER_ID IS NULL;
看来我遇到的错误是在FROM
上。有人可以解释一下这是什么原因以及如何解决它吗?
【问题讨论】:
【参考方案1】:在 Oracle 中,您不能以这种方式在 update
statement 中使用 from
子句。以下任何一项都应该有效。
UPDATE d
SET d.user_id =
(SELECT c.user_id
FROM c
WHERE d.mgr_cd = c.mgr_cd)
WHERE d.user_id IS NULL;
UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
FROM d INNER JOIN c ON d.mgr_cd = c.mgr_cd
WHERE d.user_id IS NULL)
SET d_user_id = c_user_id;
UPDATE (SELECT d.user_id AS d_user_id, c.user_id AS c_user_id
FROM d INNER JOIN c ON d.mgr_cd = c.mgr_cd)
SET d_user_id = c_user_id
WHERE d_user_id IS NULL;
但是,我更喜欢在这种情况下使用MERGE
:
MERGE INTO d
USING c
ON (d.mgr_cd = c.mgr_cd)
WHEN MATCHED THEN
UPDATE SET d.user_id = c.user_id
WHERE d.user_id IS NULL;
【讨论】:
以上是关于带有内部联接的 Oracle 更新语句的主要内容,如果未能解决你的问题,请参考以下文章