昨天以前的同事问了我一个需求,要查询指定表中自增长序列的第一个不连续的的值。
之前一直使用oracle,就先举出了一种oracle的方法:
select t.n from (SELECT id,ROWNUM N FROM demoinc order by id)t where t.id!=t.N and rownum=1
这条语句利用oracle内置提供的伪列rownum,应该还算高效吧。
后来之前的同事说不用oracle,他们正在使用sqlite。
对sqlite了解不是很多,放弃了一些性能,改用子查询实现了:
select MIN(id) from demoinc a where not exists(select * from demoinc where id=a.id+1)
后来考虑了一下,估计在上层应用中使用vector加快排效率应该也会不错。
本文介绍了如何在Oracle和SQLite数据库中查找指定表自增长序列中的第一个不连续值。首先通过Oracle的ROWNUM特性实现,接着提供了SQLite的解决方案,并讨论了在应用程序级别优化的可能性。

被折叠的 条评论
为什么被折叠?



