database - 如何在已经存在的表中添加一列并在其中填写按 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
。
解决方案
通常这样的任务更容易用一个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;
推荐阅读
- git - 如何在合并分支中创建新分支并从其他分支合并而不更改日志
- python - 使用 xls 将日期时间添加到 Excel 工作表中
- python - anaconda 手动更新卡在获取 pywinpty
- node.js - 如何动态向 Postman 发送参数?
- python - 如何从动态表中检索用户输入的数据
- python - 在python中处理无穷大的操作
- laravel - AlpineJS 过渡:淡出文本,替换文本,然后淡入新文本
- java - 由这些 [ ] 括号引起的 START_ARRAY 令牌中的 Json 文件错误
- database-design - 如何为具有附加属性的库存交易/移动设计数据库?
- tailwind-css - 下拉菜单未覆盖其下方的菜单