首页 > 解决方案 > Android sqlite,为新列设置行位置

问题描述

我在表格中添加了一个新的列 ( position)。它需要从 0 到 n 排序。并且应该反映行的顺序_id。但问题是_id有差距,因为有些行被删除了,position不应该有差距。

像这样:

_id   position[new column]
1     0 
4     1   
8     2
17    3

在数据库升级期间如何实现这一点?最好只有一个 sql 语句来执行execSQL,而无需使用游标查询现有数据。

标签: androidsqlsqlitesql-update

解决方案


其他 DBMS 必须ROW_NUMBER()使这更容易。

在 SQLite 中,您可以使用相关子查询来计算“有多少行的 id 低于这一行”。恰好与您想要的枚举数列完全匹配的答案( position)

UPDATE
  yourTable
SET
  position = (SELECT COUNT(*)
                FROM yourTable   lookup
               WHERE lookup._id < yourTable._id
             )

推荐阅读