我在Oracle DB中有一个这样的表。
S_Name S_NO S_SID
Michael (NULL) C40
Jay (NULL) A44
David (NULL) G71
Chris (NULL) Y53
... ... ...
我想根据订购的S_SID更新所有S_NO。 这意味着(A44> C40> G71> Y53)
S_Name S_NO S_SID
Michael 2 C40
Jay 1 A44
David 3 G71
Chris 4 Y53
... ... ...
答案 0 :(得分:2)
您可以使用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
)