在sqlite中搜索缺少的rowId

时间:2015-06-19 17:48:41

标签: android sqlite

在我的表中,有些行已被删除。如何找到第一个缺失的ID?

例如:

ID    DATA
1    row1
2    row2
4    row3
8    row4

我怎样才能发现Id 3丢失了? 这需要在android 3.0最低版本

上运行

1 个答案:

答案 0 :(得分:2)

在SQLite 3.8.3或更高版本中,您可以使用以下查询来查找特定范围内的第一个未使用的ID:

WITH RECURSIVE all_ids(id) AS (
  VALUES(1)
  UNION ALL
  SELECT id + 1
  FROM all_ids
  LIMIT 99999
)
SELECT id
FROM all_ids
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable
                  WHERE rowid = all_ids.id)
LIMIT 1

在早期的SQLite版本中,您无法动态生成值。但是,所需的ID比现有ID大1,因此您只需从表中获取ID并检查下一个是否存在(零是处理空表的特殊情况):

SELECT id + 1
FROM (SELECT 0 AS id
      UNION ALL
      SELECT rowid
      FROM MyTable
      WHERE rowid <= 99999
     ) AS ids
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable
                  WHERE rowid = ids.id + 1)
LIMIT 1