当前位置: 代码迷 >> Sql Server >> SQL 自增列查询缺省值解决办法
  详细解决方案

SQL 自增列查询缺省值解决办法

热度:35   发布时间:2016-04-24 10:39:41.0
SQL 自增列查询缺省值
如 有表  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
  相关解决方案