gpt4 book ai didi

mysql - 检测(自动递增)序列中的缺失值

转载 作者:可可西里 更新时间:2023-11-01 07:50:06 26 4
gpt4 key购买 nike

我有一个“端口”INT 列,它的范围应该是 30000 到 50000。

因此,我有一个插入值的存储过程(端口不为空)。所以我必须“手动”选择存储在该字段上的值。问题是,虽然我可以在某个点增量插入(30000、30001、30002 ....)一些条目被删除(它变成了 30000、30002、30004 ....)所以有一些漏洞需要设置。

我需要在我的 SP 中放置一种方法来适应这些孔(在我的示例中,它们是 30001,30003 ....)。我的问题是如何在 SP 中检查某个值是否已被“占用”。

我想使用 MySQL 的 LOOP。试过这样的事情:

CREATE PROCEDURE teste()
BEGIN
DECLARE p INT;
DECLARE aux INT;
SET p = 30000;

label1: LOOP

SELECT Port FROM Reg WHERE Port = p INTO aux;

IF p = 50000 THEN
LEAVE label1;
END IF;


IF aux IS NULL THEN -- aux-1 is not null, so I can verify the "next miminum available position"
aux = aux - 1;
LEAVE label1;

ELSE
SET p = p + 1;
ITERATE label1;


END IF;

END LOOP label1;

RETURN aux;

END $$

我的问题是获取结果值。如果我放置该 RETURN 语句,我将获得仅允许在 FUNCTION 上使用的信息。当我结束循环时,SELECT 的结果始终为 null。

我能做什么?

最佳答案

以下是您如何在序列中查找缺失值的方法。

SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
FROM seq AS a, seq AS b
WHERE a.id < b.id
GROUP BY a.id
HAVING start < MIN(b.id)

示例输出:

    +-------+------+
| start | end |
+-------+------+
| 4 | 4 |
| 7 | 9 |
+-------+------+

这意味着在id 序列中缺少值 4,以及从 7 到 9(含)的数字。

通过替换相应的名称来根据您的需要调整此代码。

关于mysql - 检测(自动递增)序列中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8659725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com