首页 > 解决方案 > 如何在已经存在的表中添加一列并在其中填写按 Oracle 服务器上的列排序的 ID?

问题描述

在 table 中TEST,我想添加一列ID并在其中填充 ID,每行递增 1。我需要根据 column 排序的 ID COL。到目前为止,我已经这样做了:

ALTER TABLE TEST ADD ID INTEGER;
UPDATE TEST SET ID = ROWNUM;

这种方法的问题是 ID 没有相对于 排序COL。我需要这样的东西:

UPDATE TEST SET ID = (SELECT ROWNUM FROM TEST ORDER BY COL);

但得到一个错误。我也尝试过这样的 CTE:

WITH CTE AS (
    SELECT * FROM TEST ORDER BY COL
) UPDATE CTE SET ROWNUM = ID;

得到错误missing SELECT keyword

标签: databaseoraclecommon-table-expressionrownum

解决方案


通常这样的任务更容易用一个merge语句来解决。例如:

merge into test t
using (select rowid as rid, row_number() over (order by col) as rn from test) s
   on (s.rid = t.rowid)
when matched then update set id = rn;

推荐阅读