【问题标题】:how to re-index (number) sorted sqlite table如何重新索引(数字)排序的sqlite表
【发布时间】:2012-11-30 11:41:08
【问题描述】:

例如,我有带索引的节点

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 中没有存储过程,所以我很清楚如何在没有变量的情况下建立这种关系?

欢迎所有逻辑提示。

【问题讨论】:

  • 为什么需要重新索引?当然,唯一重要的是它们是独一无二的,而不是它们的实际价值是什么?
  • 为了更加清晰,1 2 3 4 比 1 2 3 7 更具可读性。当然,有情况只显示 1 2 3 4 但我想在索引上保留数字该用户只能在需要时记住和重新索引。

标签: sql sqlite


【解决方案1】:
  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 将新表替换为旧名称。

(这将从 1 开始创建 ids。)

【讨论】:

  • 这是最好和最通用的方法!使用通用示例逐步解释它。
【解决方案2】:

这个怎么样?

 UPDATE todo SET id = rowid

【讨论】:

  • awesome ) 但在此之前我仍然需要 UPDATE TODO SET id = id + 1000000000 作为@CL指导
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 2017-07-03
  • 2018-06-09
相关资源
最近更新 更多