在我的表中,有些行已被删除。如何找到第一个缺失的ID?
例如:
ID DATA
1 row1
2 row2
4 row3
8 row4
我怎样才能发现Id 3丢失了? 这需要在android 3.0最低版本
上运行答案 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