我正在使用一个更新查询,其中我在嵌套子查询中使用了一个外部变量,但我发现一个错误:
sql错误:ora-00904:“fs”。“gr\ U编号”:无效标识符
update table fs set fs.branch_id=
(select branch_id
from
(select branch_id,row_number() over(PARTITION by gr_number order by updated_ts desc) as Sno
from admission_log
where gr_number=fs.gr_number )
where sno=1) ;
3条答案
按热度按时间wgx48brx1#
查询的问题是您试图访问
fs.gr_number
向下两级的子查询中的列。您只能访问子查询中的顶层列。你的陈述应该是:
这将相关性降低了一个级别。请注意,我还对嵌套子查询使用了别名。
表演应该不会很糟糕,因为
x.gr_number = fs.gr_number
predicate 在子查询中涉及分析函数正在其上分区的同一列。这应该允许oracle适当地过滤子查询。eta:也可以使用merge语句:
b0zn9rqh2#
使用此代码:
cuxqih213#
因为它是oracle,所以可以使用merge子句并使用min()函数而不是row\ u number()函数来获取值。
如果您仍然想使用roe\u number()函数,下面是查询。加入表的where子句应该在子查询之外。