如何在MySQL中获取某个范围内的下一个可用id?

qvsjd97n  于 2023-04-19  发布在  Mysql
关注(0)|答案(2)|浏览(126)

我试图找出从单个MySQL表中找到特定id范围内的下一个可用id的最简单方法。
假设从一个普通查询得到以下id结果集:

SELECT id FROM `foo`

结果:

1
2
3
10
50
52
53
54
60

我想在5059之间找到第一个可用的id。在这个特定的例子中,答案是51
用MySQL实现这一点的最佳方法是什么?

jjjwad0x

jjjwad0x1#

创建另一个具有足够id值的查找表bar并使用query:

select min(b.id) 
from bar b
 left join foo f on f.id=b.id 
where b.id between 50 and 59 and f.id is null;

如果不能使用其他表,则可以使用递归CTE来模拟一个表:

with recursive bar (id) AS
(
  select 1
  union all
  select id + 1 from bar where id < 100
)
select min(b.id) 
from bar b
 left join foo f on f.id=b.id 
where b.id between 50 and 59 and f.id is null;
hfsqlsce

hfsqlsce2#

如果你想获得下一个免费的id,你可以用途:

SELECT COALESCE(MIN(id), 0) + 1
FROM `foo` 
WHERE NOT EXISTS (SELECT id FROM `foo` t2 WHERE t2.id = `foo`.id + 1);

如果id有一个起始值(例如50):

SELECT COALESCE(MIN(id), 0) + 1
FROM `foo` 
WHERE NOT EXISTS (SELECT id FROM `foo` t2 WHERE t2.id = `foo`.id + 1);
AND id > 50

如果id应该在某个范围内(例如在5059之间):

SELECT COALESCE(MIN(id), 0) + 1
FROM `foo` 
WHERE NOT EXISTS (SELECT id FROM `foo` t2 WHERE t2.id = `foo`.id + 1);
AND id > 50
AND id < 59

注意:id50必须存在,否则上面的查询不会得到51

相关问题