Oracle SQL-将Oracle SQL中的ID更新为顺序
技术问答
246 人阅读
|
0 人回复
|
2023-09-14
|
我在Oracle SQL中有一张表,其ID的顺序是递增的,但是由于编辑的原因,ID中存在间隙,例如,ID当前类似于# J' \1 q1 D) P% E9 v" T
22 * W# P2 h" I, Y L
23
; U! E" J8 i+ U$ N6 C24 9 w. l, ~: t9 n: j) @% ~
32 ( X; k- `& e2 ~
33 8 ~8 Z+ t0 N H9 u
44 2 h4 _' n! S2 w: s) ~- o3 J
…等等/ T$ V! j5 G* V
, m3 F( y5 r& p" w7 _我想通过遍历表中的每一行并更新它们来解决这些差距,因此没有差距。最好的方法是什么? w% }+ O( a8 q1 b* u
7 S) K' s. G+ `6 T8 t9 |解决方案:; l& o8 ]' i3 L9 Y
7 s, Q* N$ H2 l" _- T
^* S- o; x) a; ~! O7 Q4 R
/ M/ ?0 |) _( l% _' m6 X
我认为以下将在Oracle中起作用:% t& q! D% W* D* n5 X& g( Q( S
update (select t.*, row_number() over (order by id) as newid) toupdate$ z/ i4 ], _4 @; h2 k5 L( |
set id = newid
0 ^, E0 s& [# W3 _上面的答案很久以前就被接受了。它不起作用。我认为答案应该包含有效的代码,因此:3 @& \" k2 [/ G4 a) H1 D {$ t
merge into t dest using
5 l: R2 z$ @" K5 Z1 @ (select t.*, row_number() over (order by id) as newid from t) src7 Y- [& t, i- v
on (dest.rowid = src.rowid)( o) j3 n$ K6 [/ O
when matched then update set id = newid; |
|
|
|
|
|