3

たとえば、インデックス付きのノードがあります

1
2
7
8

インデックスをに変更する必要があります

1 
2 
3 
4

私は出来ます

UPDATE TODO SET id = id + 1000000000
UPDATE TODO SET id = id - (1000000000 + 1)

(IDは一意である必要があるためトリッキー)

すべてのインデックスをシフトして016 7を作成しますが、リレーションを作成し、最初のインデックスを0にシフトし、他のインデックスを前のインデックスにシフトする必要があります。sqliteにはストアドプロシージャがないので、変数なしでこのような関係を作成するにはどうすればよいですか?

すべてのロジックのヒントは大歓迎です。

4

2 に答える 2

5
  1. 同じ構造で新しい空のテーブルを作成しますがid、自動インクリメント列を作成します(として宣言しますINTEGER PRIMARY KEY)。
  2. すべてのレコードを希望の順序でそのテーブルにコピーしますが、id列はありません。

    INSERT INTO NewTable(all_the, other, columns)
    SELECT all_the, other, columns
    FROM OldTable
    ORDER BY id;
    
  3. 古いテーブルを削除し、新しいテーブルの名前を古い名前に変更します。

(これによりid、1から始まるが作成されます。)

于 2012-11-30T11:58:15.127 に答える
3

これはどう?

 UPDATE todo SET id = rowid
于 2012-11-30T11:53:47.047 に答える