首页 > 解决方案 > 更新数据集中缺失的增量数字

问题描述

在我的一个表中,我有一个名为“优先级”的列,它是一个从 1 开始的数字。有了新数据,下一个数字将被添加到新记录中。当我从中间删除数据时,优先级会有差距。我想运行一个 plsql update 语句,以便根据我之前的优先级顺序替换丢失的数字。

原始数据

Priority | user 
1        | A
2        | B
3        | C
4        | D

然后我删除记录B

Priority | user
1        | A
3        | C
4        | D

更新后应该是这样的

Priority | user
1        | A
2        | C
3        | D

标签: plsqlsql-update

解决方案


你可以在没有 PL/SQL 的情况下做到这一点:

create table demo
( priority  number, username varchar2(20) );

insert all
    into demo values (2, 'A')
    into demo values (4, 'B')
    into demo values (9, 'C')
    into demo values (10, 'D')
select * from dual;

merge into demo o
using ( select row_number() over (order by priority) as new_priority
             , rowid as row_id
        from   demo ) n
on (n.row_id = o.rowid)
when matched then update set o.priority = n.new_priority;

select * from demo;

  PRIORITY USERNAME
---------- --------------------
         1 A
         2 B
         3 C
         4 D

推荐阅读