在我的表中有一些行已被刪除。我怎樣才能找到第一個缺少的ID?在sqlite中搜索丟失的rowI
例:
ID DATA
1 row1
2 row2
4 row3
8 row4
我怎樣才能找到ID爲3缺什麼? 這需要對Android 3.0的最低
在我的表中有一些行已被刪除。我怎樣才能找到第一個缺少的ID?在sqlite中搜索丟失的rowI
例:
ID DATA
1 row1
2 row2
4 row3
8 row4
我怎樣才能找到ID爲3缺什麼? 這需要對Android 3.0的最低
運行在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較大的一個,所以你可以只取表中的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
你爲什麼認爲你需要第一個缺失的ID? –
我需要生成一個唯一的ID,以便我可以插入一個新行。生成的ID必須介於1和99999之間,因爲99999之後的行被保留或已被使用 – chris