我正在尝试找到一种识别空键范围的方法。
我有一个表只有主键数,名为id
。
我正在努力填补收到一批产品的空白。
我的专栏id
(小组)的数字可以互相跟随,但是对于每种产品类型,我们会跳到另外几千名,而且有些员工没有遵循下一个免费广告的规则,他们发现一个空的用它!
我需要找到具有类似功能的东西:
select product.id
from product
where product.id >= x
and next product.id > x + y
例如;如果x是我的起点并且值为25000且y = 50, 50个未使用的数字首次达到26600至27500.
结果会给我25999 ......这将是最后输入的产品。
批量产品必须具有连续的数字。
是否有任何查询可以提供该结果?
提前谢谢你!
答案 0 :(得分:0)
此查询应使用50作为所需大小产生第一个合适的间隙。 请注意,您应该查询间隙并在同一事务中插入批处理,以防止其他人同时使用相同的间隙。
select a.id+1
from yourtable a
where not exists (select id from yourtable where id between a.id+1 and a.id+50)
order by a.id
limit 1
如果表为空,则此查询将不返回任何行。
请注意,在需求量大且同时插入多个上下文中填补主键空白是一个坏主意,因为它会序列化所有事务。