我有桌面测试:
cod double PRI
nom varchar(100)
tip varchar(50)
des varchar(500)
pre double
该表包含一个名为“cod”的数字主键。鳕鱼值从1000到40000.
可以删除行。 F / E:
有鳕鱼:
1001 X X X 1.0
1002 Y Y Y 2.0
1003 Z Z Z 3.0
1004 A A A 4.0
1005 B B B 5.0
如果删除1002,则在1001和1003之间缺少一个数字。
1001 X X X 1.0
1003 Z Z Z 3.0
1004 A A A 4.0
1005 B B B 5.0
我可以进行查询以获取所有这些缺失的数字,以便我可以建议用户可以自由注册新行的鳕鱼值吗?
答案 0 :(得分:1)
我建议采用不同的方法。如果您有一个限制为39000行的表,则创建该表以包含所有行开头。
然后,有一个IsAvailable
标志。您可以只更新标志:
update test t
set IsAvailable = 1
where cod = < whatever >;
如果要使用值,请将可用标志设置为1。
然后,您可以使用以下内容获取前10个可用插槽:
select cod
from test
where IsAvailable = 1
limit 10;
顺便说一下,在整个问题中你将cod
称为整数,但它被声明为double。我强烈建议你将列设为整数值。
答案 1 :(得分:0)
您可以使用:
SELECt test1.cod - 1 AS missing_cod
FROM test AS test1
LEFT JOIN test test2 ON test2.cod = test1.cod - 1
WHERE test2.cod IS NULL
这应该有用(我想),我不知道如果你有多个遗失的号码将会发生什么
为什么在cod
列上使用带整数值的double?