Mysql SQL查询以列出未使用的数字ID
我在column=ID上索引了一个表,它是一个5位整数 这是一个非常旧的表,从未自动递增 我想列出所有未使用的ID 我可以用SELECT*ORDER BY语句来实现,然后对递增的for循环运行结果,但我想知道是否有人知道SQL查询语句可以在MySQL中实现这一点,或者您是否有比我计划采用的方法更聪明的方法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
谢谢这是我会采取的方法 创建一个从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