mysql 列中的最低可用值
Posted
技术标签:
【中文标题】mysql 列中的最低可用值【英文标题】:Lowest free value in mysql column 【发布时间】:2014-12-18 17:36:08 【问题描述】:我已经搜索过了,但我总是找到 LEAST 和 GREATEST 作为提示。我想在未使用的行中有下一个升序数字。像下面这样:
entries
1
2
3
5
6
7
如果每个数字都代表我表中的一行,我想要数字 4 作为结果,在以下示例中:
1
2
3
4
5
6
我想要数字 7 作为结果。是否有可能在 SQL 语句中完成此操作?
最好, 罗宾
【问题讨论】:
想象一下,您有出售的物品,每件物品都有一个编号。你卖的第一个得到数字 1,第二个得到数字 2。现在有人买了 3,现在数字被退回。由于某些原因,现在 2 号再次免费,也需要出售。这有点困难,但在这种情况下,我需要这个。当然我也可以用php来完成,不过我想可能mysql也有解决办法。 但是谁在乎它是 4 号还是 7 号呢?谁在乎是否有差距?而且,如果没有怎么办。 1 不见了?这类问题通常表明对数据完整性的重要性存在深刻的误解。 此任务不需要使用数据库 您只是在寻找一些智能自动增量吗? 【参考方案1】:此查询假定数字 1 在您的表中
select min(number) + 1 from entries e1
where not exists (
select 1 from entries e2
where e2.number = e1.number + 1
)
如果您想要所有缺失的数字(间距不大于 1)而不是最小的数字,请删除 min()
【讨论】:
"如果你想要所有缺失的数字 [其中间隙不大于 1]..." 我想你可以这样看 ;-)【参考方案2】:它认为解决方案是与下一个值进行自连接,并提取第一个最低的结果。示例:
表:values
,列value
SELECT v1.value
FROM values v1
LEFT JOIN values v2 ON v1.value = (v2.value + 1)
WHERE v2.value IS NULL
ORDER BY v1.value ASC
LIMIT 1
【讨论】:
以上是关于mysql 列中的最低可用值的主要内容,如果未能解决你的问题,请参考以下文章