一尘不染

如何在mysql中找到顺序编号中的空白?

mysql

我们有一个带有表的数据库,该表的值是从另一个系统导入的。有一个自动增量列,没有重复的值,但缺少值。例如,运行以下查询:

select count(id) from arrc_vouchers where id between 1 and 100

应该返回100,但返回87。我可以运行任何查询来返回缺失数字的值吗?例如,可能存在ID为1-70和83-100的记录,但是没有ID为71-82的记录。我想返回71、72、73等

这可能吗?


阅读 240

收藏
2020-05-17

共1个答案

一尘不染

更新资料

ConfexianMJS 在性能方面提供 了更好的
答案

(不尽快)的答案

以下版本适用于任何大小的表格(不仅限于100行):

SELECT (t1.id + 1) as gap_starts_at, 
       (SELECT MIN(t3.id) -1 FROM arrc_vouchers t3 WHERE t3.id > t1.id) as gap_ends_at
FROM arrc_vouchers t1
WHERE NOT EXISTS (SELECT t2.id FROM arrc_vouchers t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL
  • gap_starts_at -当前差距的第一个ID
  • gap_ends_at -当前间隙中的最后一个ID
2020-05-17