select id from (select id,rownum aa from test ) p where p.id!=p.aa;
其中Test为表名,id是编号字段,这样能找到第一个不连续的编号,但不能找出后面的,另外如果你的编号字段不是从1开始的话就要作点处理.有问题再问

解决方案 »

  1.   

    谢谢你们
        
       主要我想得到数据库中还没有用过的编号号码?  
       用rockhard(探索中...)你的方法基本是可以实现我要的了。不过我这人有点贪心,还有吗?
      

  2.   

    MySQL said: You have an error in your SQL syntax near 'select id,rownum aa from user ) p where p.id!=p.aa' at line 1
    提示错误!!!
    我写的内容:
    select id from (select id,rownum aa from user ) p where p.id!=p.aa
      

  3.   

    kingcaiyao(AKing) 你的方法我想过,也用过了.当数据库一大就太慢了.
      

  4.   

    再其它的办法我看要编程比较好实现,用一变量记录前面的ID号,再跟当前的比较,如果不是小于1的话,那就可以输出现在的ID号.
      

  5.   

    忘了说了,我在Oracle下调试的,我没有MYSQL
      

  6.   

    探索中:请注意,MYSQL与别的数据库不同,到目前为止还不支持子查询!
      

  7.   

    关于这个数字资源回收的问题是比较常见的,但是最好针对具体的问题——除非你的数据增加非常快,删除极频繁,其实可以用一个比较大的整数型(比如int(11)),为什么非得限定1-10,000呢?
      

  8.   

    一般系统都不会设计超过10年(37,000天)的使用期。假设使用9位整数(MAX:999,999,999)作为ID,则大概每天可以获得27027个ID,你的数据量有这么大吗?
    其实这不是一个单纯的问题,还涉及到表格分割等大数据量处理(我也不懂了:)
      

  9.   

    各位,还有一个办法,那就是
    1.在数据库中创建一个表,此表我设计成三个字段:编号,使用状态,备注。
    2.在系统启动时,对整个表来一次检索对未使用的ID号将其存入到该表中。
    3.在你每次删除或更新以及凡是涉及到编号更改的地方,另开辟一线程用于将其ID号写到数据表(当然如果表中已有些编号,你只需设置其使用状态),并将其状态置成未用状态。
    4.当你新添加一记时首先到该表中查找,判断它的使用状态,如果找到一个未使用的就选择它,并将它的使用状态置为使用状态.
    大家认为如何呢?
      

  10.   

    mysql不是一个好东西,它不支持嵌套的sql查询,只有用in 或 not in 来代替嵌套查询
      

  11.   

    kingcaiyao(AKing)
    你的方法可行,但我这次是不能用了。谢了。