我们有一个数据库,其中一个表的值是从另一个系统导入的.有一个自动递增列,没有重复的值,但缺少值.例如,运行此查询:
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等等.
这可能吗?
我们有一个数据库,其中一个表的值是从另一个系统导入的.有一个自动递增列,没有重复的值,但缺少值.例如,运行此查询:
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等等.
这可能吗?
在性能方面,MJS提供了much betteranswer.
以下版本适用于任何大小的表格(不仅仅是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
-当前间隙中的第一个idgap_ends_at
-当前间隙中的最后一个id