我有一个表具有唯一的自动增量主键.随着时间的推移,可能会从表中删除条目,因此该字段的值中存在"漏洞".例如,表数据可能如下:
ID | Value | More fields...
---------------------------------
2 | Cat | ...
3 | Fish | ...
6 | Dog | ...
7 | Aardvark | ...
9 | Owl | ...
10 | Pig | ...
11 | Badger | ...
15 | Mongoose | ...
19 | Ferret | ...
Run Code Online (Sandbox Code Playgroud)
我对将返回表中缺少ID列表的查询感兴趣.对于上述数据,预期结果如下:
ID
----
1
4
5
8
12
13
14
16
17
18
Run Code Online (Sandbox Code Playgroud)
笔记:
上述要求的缺点是列表不会返回在ID 19之后创建且已删除的ID.我目前正在代码中解决这个问题,因为我持有创建的最大ID.但是,如果查询可以作为参数MaxID,并且还返回当前max和MaxID之间的那些ID,那将是一个很好的"奖励"(但肯定不是必须的).
我目前正在使用MySQL,但考虑转移到SQL Server,所以我希望查询适合两者.此外,如果您使用的是无法在SQLite上运行的任何内容,请提及它,谢谢.
可能重复:
用于查找缺失序列号的SQL查询
我有一个具有用户ID列的表,用户可以选择要在表中添加的用户ID.我想知道是否有一个SQL代码可以指向未使用的用户ID列表,甚至只是最小的未使用的ID?
例如,我有以下ID
USER_ID 1 2 3 5 6 7 8 10
我想知道是否有办法选择4甚至选择4和9?
sql ×2