【发布时间】:2011-06-28 15:45:22
【问题描述】:
我正在尝试运行包含 2 级子查询的 UPDATE 语句,这些子查询引用更新后的表,但出现错误。 请考虑以下代码。它给了我“c.end_date 无效标识符”错误,好像表 c(更新的表)在最深的子查询中不可见。 如果我将子查询展平为仅一级子查询,我就会失去其背后的逻辑。
关于如何编写它以便编译和正常工作的任何想法?
我正在使用 Oracle 数据库 10g 企业版版本 10.2.0.3.0 - 产品
create table calc(
agrmt_id number,
cust_num number,
prod_id number,
price number,
start_date date,
end_date date);
create table trans(
agrmt_id number,
cust_num number,
prod_id number,
units number,
trans_date date);
create table products(
prod_id number,
other_prc number,
prod_start date,
prod_end date);
update calc c set price = (with avg_price_per_prod as (select prod_id, avg(other_prc) avg_prc
from products
where prod_end >= c.start_date
and prod_start <= c.end_date
group by prod_id
) select sum(t.units) * a.avg_prc
from trans t, avg_price_per_prod a
where t.trans_date between c.start_date and c.end_date
and t.agrmt_id=c.agrmt_id
and t.cust_num=c.cust_num
and t.prod_id = a.prod_id
);
【问题讨论】:
标签: sql oracle subquery correlated-subquery