我的mysql数据有几个范围(比如100到200,201到350等等)(行看起来像)
id (pk) label (int) name (string)
1 101 Row1
1 102 Row2
1 104 Row4
1 105 Row5
1 107 Row7
现在我想找到一个范围内最低的未使用标签。注意:这些标签不是键,只是整数字段中的标签号。删除行时,该标签应可用于具有新id的新行。
在上面的例子中是100。
id label name
1 100 Row1
1 101 Row1
1 102 Row2
1 104 Row4
1 105 Row5
1 107 Row7
在上面的例子中是103
id label name
1 101 Row1
1 102 Row2
1 104 Row4
1 105 Row5
1 107 Row7
在上面的例子中是100
但是有了这个问题
SELECT DISTINCT(t1.label + 1) AS number
FROM descriptions t1
WHERE NOT EXISTS(SELECT * FROM descriptions t2 WHERE t2.label = t1.label + 1) AND t1.label IS NOT NULL
AND t1.label >= 100 AND t1.label < 107
ORDER BY t1.label
LIMIT 1
它会给我103而不是100,我需要100
1条答案
按热度按时间izj3ouym1#
一种解决方案:首先有一个包含所有值的表(只需要一列,然后为所有值插入行)
然后就可以在这上面做一个左连接
这个查询实际上会查找表中没有行的所有allnumber行(因为where中的is null)。。。但由于使用了聚合函数(min),它包含了一个虚拟的“groupby”,只得到一个结果行。