一尘不染

如何在表格中查找“孔”

sql

我最近继承了一个数据库,在该数据库上,表中的一个具有由编码值组成的主键(Part1 * 1000 + Part2)。
我对该列进行了归一化,但无法更改旧值。所以现在我有

select ID from table order by ID
ID
100001
100002
101001
...

我想在表中找到新行的“孔”(更准确地说是100000之后的第一个“孔”)。
我正在使用以下选择,但是有更好的方法吗?

select /* top 1 */ ID+1 as newID from table
where ID > 100000 and
ID + 1 not in (select ID from table)
order by ID

newID
100003
101029
...

该数据库是Microsoft SQL Server2000。我可以使用SQL扩展名。


阅读 142

收藏
2021-03-17

共1个答案

一尘不染

select ID +1 From Table t1
where not exists (select * from Table t2 where t1.id +1 = t2.id);

不知道此版本是否会比您最初提到的版本快。

2021-03-17