Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询可用值_Mysql - Fatal编程技术网

MySQL查询可用值

MySQL查询可用值,mysql,Mysql,我有表格测试: cod double PRI nom varchar(100) tip varchar(50) des varchar(500) pre double 该表包含一个名为“cod”的数字主键。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之间缺少一个

我有表格测试:

cod double  PRI     
nom varchar(100)
tip varchar(50) 
des varchar(500)
pre double
该表包含一个名为“cod”的数字主键。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
我可以查询所有这些缺失的数字,以便向用户建议哪些cod值可以免费注册新行吗?

您可以使用以下方法:

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?

我建议使用另一种方法。如果您有一个限制为39000行的表,请创建该表,其中包含所有要开始的行

然后,设置一个
IsAvailable
标志。您可以只更新标志,而不是删除记录:

update test t
    set IsAvailable = 1
    where cod = < whatever >;

顺便说一下,在整个问题中,您将
cod
称为整数,但它被声明为双精度。我强烈建议您将该列设置为整数值。

是否有特定(且良好)的理由将该值限制为40000?如果没有可用的数字会发生什么?是的,如果连续缺少数字,这将不起作用。
select cod
from test
where IsAvailable = 1
limit 10;