【发布时间】:2009-09-07 14:12:15
【问题描述】:
我有一个具有唯一自动增量主键的表。随着时间的推移,可能会从表中删除条目,因此该字段的值中存在“漏洞”。例如,表格数据可能如下:
ID | Value | More fields...
---------------------------------
2 | Cat | ...
3 | Fish | ...
6 | Dog | ...
7 | Aardvark | ...
9 | Owl | ...
10 | Pig | ...
11 | Badger | ...
15 | Mongoose | ...
19 | Ferret | ...
我对将返回表中缺失 ID 列表的查询感兴趣。对于以上数据,预期结果为:
ID
----
1
4
5
8
12
13
14
16
17
18
注意事项:
- 假设最初的第一个ID是1
- 应检查的最大 ID 是最后一个,即可以假设在当前最后一个之后没有其他条目(请参阅下面关于这一点的其他数据)
上述要求的一个缺点是该列表不会返回在 ID 19 之后创建并被删除的 ID。我目前正在用代码解决这种情况,因为我持有创建的最大 ID。但是,如果查询可以将 MaxID 作为参数,并且还返回当前 max 和 MaxID 之间的那些 ID,那将是一个不错的“奖励”(但肯定不是必须的)。
我目前正在使用 MySQL,但考虑迁移到 SQL Server,因此我希望查询适合两者。另外,如果您使用的任何东西不能在 SQLite 上运行,请注明,谢谢。
【问题讨论】:
标签: sql