如 有表 KKK 数据是 :
ID为自增列~
id name
1 a
2 b
4 c
5 d
8 e
9 f
可以看出 缺少了 ID为 3,6,7 的数据
怎样在新增 的数据 g 时 找到最小的缺省ID 并组合成 3 'g' 插入到表中。
PS: ID不一定是数据库定义的自增列,可以只是用户主观上的定义。重点是如何找到缺省ID的值。
------解决方案--------------------
用自增列的目的,大多是为了即能设为主键提供索引查询,又可以免去每次插入的管理工作,既然楼主需要高精确度的数据,那自增列并不适合这项工作,而且楼主还需要自己维护一张表,用来维护缺省数值,当然可以用递归来找缺失,但如果数量很大,效率就不高
------解决方案--------------------
首先要把缺的号查出来,给你个列子,具体的自己写吧
--测试数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',2
UNION ALL SELECT 'a',3
UNION ALL SELECT 'a',6
UNION ALL SELECT 'a',7
UNION ALL SELECT 'a',8
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',5
UNION ALL SELECT 'b',6
UNION ALL SELECT 'b',7
GO
--缺号分布查询
SELECT a.col1,start_col2=a.col2+1,
end_col2=(
SELECT MIN(col2) FROM tb aa
WHERE col1=a.col1 AND col2>a.col2
AND NOT EXISTS(
SELECT * FROM tb WHERE col1=aa.col1 AND col2=aa.col2-1))
-1
FROM(
SELECT col1,col2 FROM tb
UNION ALL --为每组编号补充查询起始编号是否缺号的辅助记录
SELECT DISTINCT col1,0 FROM tb
)a,(SELECT col1,col2=MAX(col2) FROM tb GROUP BY col1)b
WHERE a.col1=b.col1 AND a.col2<b.col2 --过滤掉每组数据中,编号最大的记录
AND NOT EXISTS(
SELECT * FROM tb WHERE col1=a.col1 AND col2=a.col2+1)
ORDER BY a.col1,start_col2
/*--结果
col1 start_col2 end_col2
-------------- -------------- -----------
a 1 1
a 4 5
b 2 4