1

データベースの行の番号を付け直す必要があります。いくつかの行を削除した後、特定の列の番号を付け直す必要があります。を使用してそれを行うにはどうすればよいpostgresqlですか?

更新: 例: 次のようなテーブルがあります。

ac_n_circ     name

1               x 
2               y
8               c
15              b

そして、このテーブルの番号を次のように変更します。

ac_n_circ     name

1               x 
2               y
3               c
4               b

posgresqlでこれを行うアルゴリズムまたはそのようなものはありますか?

ありがとう!

4

1 に答える 1

3

注意:

これは、主キー列でない場合にのみ意味ac_n_circがあります。

これが必要であると確信している場合 (本当にそうですか?)、次のようなものが機能するはずです。

with new_numbers as  (
   select row_number() over (order by ac_n_circ) as new_nr,
          ac_n_circ, 
          id
   from foo
) 
update foo
   set ac_n_circ = nn.new_nr
from new_numbers nn 
 where nn.id = foo.id;

または:

update foo 
  set ac_n_circ = nn.new_number
from (
   select id, 
          ac_n_circ,
          row_number() over (order by ac_n_circ) as new_number
   from foo
) nn
where nn.id = foo.id;

どちらのステートメントも、 という名前の主キー列があることを前提としていますid

于 2013-04-23T18:52:08.943 に答える