首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于列出未使用的数字ID的SQL查询

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

Stack Overflow用户
提问于 2012-11-29 04:20:49
回答 3查看 415关注 0票数 0

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

这是一个非常旧的表,并且从未自动递增。

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

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-29 04:26:38

这是我会采取的方法。

  1. 创建一个从1到n的number表(n是您最大的ID)。可以使用这样的查询来生成数字:as this.
  2. Perform a LEFT JOIN to the number table,并且只获取NULL结果。

See this demo

票数 1
EN

Stack Overflow用户

发布于 2012-11-29 04:32:31

您可以像这样进行查询

代码语言:javascript
复制
    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
票数 0
EN

Stack Overflow用户

发布于 2012-11-29 05:15:25

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

代码语言:javascript
复制
select @i := 1;
update tbl set id = @id:=@id+1;

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

更新:

它现在经过测试,效果非常好。开始于

代码语言:javascript
复制
select @i := 0;

这样你在数据库中的第一个条目就会以1开头;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13613702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档