如何重新索引(数字)排序的sqlite表

时间:2012-11-30 11:41:08

标签: sql sqlite

例如我有索引

的节点
1
2
7
8

我需要将索引更改为

1 
2 
3 
4

我可以

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

(棘手,因为id必须是唯一的)

移位所有索引并使0 1 6 7但是我需要建立关系,需要使第一个索引转移到0,其他索引转移到前一个索引。在sqlite中没有存储过程,所以我很担心如何在没有变量的情况下建立这样的关系?

欢迎每一个逻辑提示。

2 个答案:

答案 0 :(得分: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. 删除旧表,并将rename新表放到旧名称上。
  4. (这将从1开始创建id。)

答案 1 :(得分:3)

这个怎么样?

 UPDATE todo SET id = rowid