Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询以列出未使用的数字ID_Mysql_Indexing - Fatal编程技术网

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

Mysql SQL查询以列出未使用的数字ID,mysql,indexing,Mysql,Indexing,我在column=ID上索引了一个表,它是一个5位整数 这是一个非常旧的表,从未自动递增 我想列出所有未使用的ID 我可以用SELECT*ORDER BY语句来实现,然后对递增的for循环运行结果,但我想知道是否有人知道SQL查询语句可以在MySQL中实现这一点,或者您是否有比我计划采用的方法更聪明的方法 谢谢这是我会采取的方法 创建一个从1到n的数字表,n是您的最大ID。可以使用这样的查询生成数字。 执行数字表的左联接,并仅获取空结果。 你可以做这样的查询 SELECT id+1 as

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

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

我想列出所有未使用的ID

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


谢谢

这是我会采取的方法

创建一个从1到n的数字表,n是您的最大ID。可以使用这样的查询生成数字。 执行数字表的左联接,并仅获取空结果。
你可以做这样的查询

    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

我知道这对插入物有效。。。可能也适用于更新。。。。将对其进行测试,但即时通讯现在在windows pc上,且未安装mysql:

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

它现在经过测试,效果非常好。。。从

select @i := 0;

因此,数据库中的第一个条目以1开头

你的数据库管理系统是什么?你不应该选择*。始终指定一个列列表。您是否有其他id字段从1到10000自动递增的表?我不确定是否理解您提出问题的原因@AndrewLogvinov-但答案是否定的。本质上,如果您有这样一个表,您可以使用表1中的select id,而id不在表2中的select id中。请不要错过我的重点问题@njk-我真的从来没有做过选择*-我只是来看看是否有人有一个聪明的解决方案。我可以用我提到的方式很容易地解决这个问题,但我一直在寻求学习新的、更具创造性的做事方法,仅此而已。除了创建数字表,你还可以创建一个。是的,@njk,这与AndrewLogvinov在上文中建议的相同。看起来你们都有最好的解决方案。@H.Ferrence我为你们添加了一个演示。另外,Andrew建议使用可能具有连续自动递增id的现有表。。。意味着重新索引所有条目,从第一个条目开始,直到最后一个条目。。。上面的内容正好可以做到这一点。。。但是我想你必须告诉你的mysql你的表的最高id。。。否则,它将开始自动递增您以前拥有的最后一个id