用于列出未使用的数字ID的SQL查询

时间:2012-11-28 20:20:49

标签: mysql indexing

我有一个以column = ID索引的表,它是一个5位整数。

这是一张非常古老的桌子,从不自动增加。

我想列出所有未使用的ID。

我可以使用SELECT * ORDER BY语句执行此操作,然后针对递增的for()循环运行结果,但我想知道是否有人知道SQL查询语句是否在MySQL中执行此操作或者如果您有一个比我计划采取的方法更聪明的方法。

由于

3 个答案:

答案 0 :(得分:1)

这是我要采取的方法。

  1. 创建一个从{1}到n的number表(n是您的最大ID)。可以使用as this等查询生成数字。
  2. LEFT JOIN表执行number,仅获取NULL个结果。
  3. See this demo

答案 1 :(得分:0)

你可以这样做一个查询

    SELECT id+1 as startId, (SELECT MIN(t3.id) -1 FROM table t3 
       WHERE t3.id > t1.id) as endId
    FROM Table AS t1
    WHERE 
    NOT Exists 
        (
           SELECT t2.id
           FROM Table as t2
           WHERE t2.id+1 = t2.id
        )
    HAVING (SELECT MIN(t3.id) -1 FROM table t3 
       WHERE t3.id > t1.id) IS NOT NULL

答案 2 :(得分:0)

我知道这适用于插入...也许可以使用更新....会测试它但我现在在Windows PC上没有安装mysql:)

select @i := 1;
update tbl set id = @id:=@id+1;

http://www.electrictoolbox.com/autoincrement-value-mysql/

更新:

现在已经过测试,效果非常好......从

开始
select @i := 0;

以便您在db中的第一个条目以1开始;