一、语法
获取1 到 500 范围间的最小可用ID :
select
CASE
WHEN (select 1 from mytable where exists(select myID from mytable where myID=1))
THEN min(myID)+1
ELSE min(0)+1
END
from mytable t where not exists (select myIDfrom mytable where myID=t.myID+1)
AND myID>0 AND myID+1 < 500
order by myID
二、解析
1. 判断最小ID是否为1
CASE
-- 查表是否存在 ID为1的数据记录
WHEN (select 1 from mytable where exists(select myID from mytable where myID=1))
-- 存在,使用当前最小的ID
THEN min(myID)+1
-- 不存在,使用1
ELSE min(0)+1
END
2. 判断最小ID递增后是否存在
-- 比较ID+1之后是否存在
select min(myID)+1 from mytable t where not exists (select myIDfrom mytable where myID=t.myID+1)
3. 范围限定
-- 限定范围,从1 到 500(不含)
AND myID>0 AND myID+1 < 500
-- 排序,可省略
order by myID
三、总结
SQLite的语法和其他SQL数据库稍有差别,对于复杂的SQL语句倒也能支持,但没有测试过性能损耗。