返回
“pe.partyid”(第2级)上的“无效标识符”。
请告知如何纠正?
update table_x pe
set pe.taxidnumber =
(select tin
from (select tin
,version
,max(version) over(partition by partyid) maxversion
from table_y
where partyid = pe.partyid)
where version = maxversion);
答案 0 :(得分:1)
在Oracle中,您可以在直接子查询中使用表别名(向下一级),但不能在更深层次嵌套的子查询中使用。
您可以使用因子子查询(WITH子句)来解决这个问题。但在您的情况下,不清楚为什么需要相关的子子查询。将partyid
匹配的WHERE条件移动到中间查询;这样,最内层的查询将是不相关的,因此它只会被计算一次。移动partyid
旁边的version = maxversion
复选。
答案 1 :(得分:0)
我愿意:
create global temporary table tempt as select tin, partyid from table_y where rownum < 2;
insert into tempt select tin, partyid
from (select tin
,partyid
,version
,max(version) over(partition by partyid) maxversion
from table_y
where version = maxversion);
merge into table_x t
using tempt d
on (t.partyid = d.partyid)
when matched then update set t.tin = d.tin;