原问题:如何使用SQL语句查询连续编号中缺失的编号?思路:创建id自增列,每次增加1,就是 1 2 3 4 5 6 7 8 ,这样依次增加,例如删除了2,但是id还是会从最后一个继续增加,也就是说这个不会把之前删除的id覆盖掉,只需要把id取出来做个对比就好了,因为id自动的,删除了一个之后,不会把删除的id增加上去,因为自增列,删除了那一条之后,id还是会从最后一个加1,不会把删除的那条数据覆盖。简单说就是写一条,ID自动增加1推上去,中间有缺失编号的就显示出来,ID还是会继续推上去,最后把表里面所有缺失的编号都以网格的形式显示出来。

解决方案 »

  1.   

    你生成一个从1到最大ID的连续号,然后使用not in 即可.
      

  2.   

    创建一个数字辅助表,该表只含有一列,就是从1到1000000(根据情况可以更大)然后就可以连接也行,not in 也可以,EXCEPT 等
      

  3.   

    每个缺失编号都要显示出来,肯定需要辅助表,如果是查缺失范围就可以直接查出来:declare @tb table(id int)
    insert @tb
    select 1 union all
    select 2 union all
    select 5 union all
    select 7 union all
    select 9select min, id-1 max from
    (
        select *, (select max(id)+1 from @tb where id<t.id)min from @tb t
    ) t
    where id<>min/*
    min         max
    ----------- -----------
    3           4
    6           6
    8           8
    */