【问题标题】:How can I use an outer query variable in a nested sub query using update?如何使用更新在嵌套子查询中使用外部查询变量?
【发布时间】:2020-09-20 22:30:41
【问题描述】:
update fee_schedule fs set fs.branch_id=
(
SELECT  branch_id  FROM   (SELECT  branch_id
                                       ,updated_ts
                                       ,gr_number
                                      ,row_number() OVER (PARTITION BY gr_number ORDER BY updated_ts desc) AS sno
                                FROM   admission_log ) x
                       WHERE  x.gr_number = fs.gr_number and to_char(x.updated_ts,'yyyymm') < fs.schedule_month
                       and rownum=1
                       order by sno
)
where fs.branch_id is null ;

SQL 错误:ORA-00907:缺少右括号 00907. 00000 - “缺少右括号”

我试过用同样的东西:

update fee_schedule fs set fs.branch_id=
(
select c.branch_id
      from (select b.branch_id,updated_ts,
                   row_number() over(PARTITION by b.gr_number order by b.updated_ts desc) as Sno
                   from admission_log b
                   where b.gr_number = fs.gr_number and to_char(b.updated_ts,'yyyymm') <  fs.schedule_month ) c
      where c.sno = 1
)
where fs.branch_id is null ;

我发现了这个错误:

SQL 错误:ORA-00904:“FS”。“SCHEDULE_MONTH”:标识符无效

【问题讨论】:

    标签: sql oracle oracle11g sql-update


    【解决方案1】:

    你可以使用keep:

    update fee_schedule fs
        set fs.branch_id =
                (select max(b.branch_id) keep (dense_rank first order by updated_ts desc)
                  from admission_log al
                       where al.gr_number = fs.gr_number and
                             to_char(al.updated_ts, 'yyyymm') < fs.schedule_month 
                )
    where fs.branch_id is null ;
    

    此结构等效于“first()”聚合函数,可以方便地绕过 Oracle 对相关子查询的范围限制。

    【讨论】:

    • 只是你太棒了,在下一个理解层次上,你能解释一下为什么你使用 max(branch_id) 和 keep 和 dense_rank 吗?
    • @abdulraheemdev 。 . .表达式的那部分只是处理有关系的情况。在这种情况下,max()min() 可能会返回相同的内容。
    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多