我有一个包含整数 ID 列的表。我想获得此列的最小未使用值。查询应该找到表 ID 中的第一个洞并获取其中的最小值。我将尝试用一些例子来解释它。
例一:无孔表
在这种情况下,我有一个没有漏洞的表,查询应该简单地获取最小未使用值:应该获取:4
|id|
|1 |
|2 |
|3 |
示例 2:顶部有孔的 table
在这种情况下,我们在顶部有一个洞(缺失值:1)。查询找到洞并得到里面的最小值:应该得到1。
|id|
|2 |
|3 |
|4 |
同样在这种情况下,我们在顶部有一个洞,但里面有更多缺失值(缺失值:1 和 2)。查询找到洞并得到里面的最小值:应该得到1。
|id|
|3 |
|4 |
|5 |
示例3:中间有孔的 table
在这种情况下,中间有一个洞(缺失值:2 和 3)。查询找到洞并得到里面的最小值:应该得到2。
|id|
|1 |
|4 |
|5 |
示例 4:顶部和中间有孔的 table
在这种情况下,我们有多个孔:一个在顶部(缺失值:1),一个在中间(缺失值:3)。查询找到第一个洞并获取其中的最小值:应该得到 1。
|id|
|2 |
|4 |
|6 |
我已经尝试了 this post 中提出的解决方案,但在我的案例中它没有按预期工作。有什么想法吗?
最佳答案
SELECT min(unused) AS unused
FROM (
SELECT MIN(t1.id)+1 as unused
FROM yourTable AS t1
WHERE NOT EXISTS (SELECT * FROM yourTable AS t2 WHERE t2.id = t1.id+1)
UNION
-- Special case for missing the first row
SELECT 1
FROM DUAL
WHERE NOT EXISTS (SELECT * FROM yourTable WHERE id = 1)
) AS subquery
关于mysql - 获取 MySQL 列中的最小未使用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719690/