【发布时间】:2014-12-30 18:22:32
【问题描述】:
使用 Oracle 11g。我需要使用自加入进行更新。 Oracle 不支持连接更新,并且使用 MERGE 不起作用,因为我正在尝试对 on 子句中使用的列进行更新
我尝试过的:
update
(
select a.ID, a.FROM_STAGE_ID, a.TO_STAGE_ID, b.TO_STAGE_ID
from STATES a,
STATES b
where a.ID = b.ID and
a.TO_STAGE_ID = b.FROM_STAGE_ID and
a.TO_STAGE_ID = 'FIZZBUZZ' and
a.FROM_STAGE_ID <> b.TO_STAGE_ID and
a.CODE = b.CODE
)
set a.TO_STAGE_ID=b.TO_STAGE_ID;
这导致:“SQL 错误:ORA-00904:“B”。“TO_STAGE_ID”:无效标识符”
MERGE
INTO STATES a
USING STATES b
ON (
a.ID = b.ID and
a.TO_STAGE_ID = b.FROM_STAGE_ID and
a.TO_STAGE_ID = 'FIZZBUZZ' and
a.FROM_STAGE_ID <> b.TO_STAGE_ID and
a.CODE = b.CODE
)
WHEN MATCHED THEN
UPDATE
set a.TO_STAGE_ID = b.TO_STAGE_ID;
这导致:“SQL 错误:ORA-38104:无法更新 ON 子句中引用的列:“A”。“TO_STAGE_ID” 38104. 00000 - “不能更新 ON 子句中引用的列:%s” *原因:UPDATE SET 的 LHS 包含 ON 子句中引用的列
我可以尝试从暂存/临时表中删除需要更新和填充的行,但我很想看看是否还有其他方法。
【问题讨论】:
标签: oracle join sql-update