0

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

这是一个非常古老的表,从未自动递增。

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

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

谢谢

4

3 回答 3

1

这是我会采取的方法。

  1. 创建一个number从 1 到 n 的表(n 是您的最大 ID)。可以使用这样的查询生成数字
  2. LEFT JOINnumber表执行 a并仅获取NULL结果。

看这个演示

于 2012-11-28T20:26:38.363 回答
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
于 2012-11-28T20:32:31.457 回答
0

我知道这适用于插入......也许也适用于更新......会测试它,但我现在在 Windows pc 上并且没有安装 mysql :)

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

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

更新:

它现在经过测试并且效果很好......从

select @i := 0;

以便您在数据库中的第一个条目以 1 开头;

于 2012-11-28T21:15:24.673 回答