Oracle子查询在第二级上看不到该变量

时间:2016-10-24 12:24:03

标签: oracle

返回

  

“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);

2 个答案:

答案 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;