Sql 如何根据同一表中另一列的顺序更新列基中的所有值?
说我在Oracle数据库中有这样一个表Sql 如何根据同一表中另一列的顺序更新列基中的所有值?,sql,database,oracle,sql-update,sequence,Sql,Database,Oracle,Sql Update,Sequence,说我在Oracle数据库中有这样一个表 S_Name S_NO S_SID Michael (NULL) C40 Jay (NULL) A44 David (NULL) G71 Chris (NULL) Y53 ... ... ... 我想根据已排序的S_SID更新所有S_NO base。 平均值A44>C40>G71>Y53 S_Name S_NO S_SID Michael 2 C40 Jay
S_Name S_NO S_SID
Michael (NULL) C40
Jay (NULL) A44
David (NULL) G71
Chris (NULL) Y53
... ... ...
我想根据已排序的S_SID更新所有S_NO base。
平均值A44>C40>G71>Y53
S_Name S_NO S_SID
Michael 2 C40
Jay 1 A44
David 3 G71
Chris 4 Y53
... ... ...
您可以使用ROW_NUMBER获取订单,以便选择以下选项
SELECT S_name, S_SID, ROW_NUMBER() OVER (ORDER BY S_SID DESC) as RN
给你一个值,把它放在更新中
更新
此代码
UPDATE TABLE SET S_NO = (SELECT ROW_NUMBER() OVER(ORDER BY S_NO) AS RN FROM TABLE)
不连接回表,因此服务器假定您只想从子查询中获取一个值,并将其分配给所有行
您需要加入索引:
UPDATE TABLE AS MAIN_TABLE
SET MAIN_TABLE.S_NO = (SELECT ROW_NUMBER() OVER(ORDER BY S_NO) AS RN
FROM TABLE AS SUB_TABLE
WHERE MAIN_TABLE.INDEX_COLUMN = SUB_TABLE.INDEX_COLUMN
)
从S_Sidu的订单上使用行数更新您确定这不是更好的即时计算吗?在任何插入/更新之后是否不需要更新此项?表中所有行的S_SID是否始终唯一?它用于“初始”设置。之后,不需要更新,但需要使用“maxS_NO+1”进行插入。SID在表中是唯一的。为什么描述?提供的示例似乎是升序的。UPDATE TABLE SET S_NO=选择按S_NO排序的行数OVERORDER BY S_NO AS RN FROM TABLE但它返回单行子查询返回多行如何在单个查询中更新所有行?谢谢