我有一张巨大的桌子,上面有几十万条记录。它们都有第一列的唯一ID,但数字序列中缺少一些。
我正在尝试显示单独丢失的数字列表。
例如:
10029
10032
10034
10036
我想让它显示出来:
10030
10031
10033
10035
我找到了这个查询,但是当有一个范围时似乎缺少数字:
SELECT t1.id+1 AS Missing
FROM data AS t1
LEFT JOIN data AS t2
ON t1.id+1 = t2.id
WHERE t2.id IS NULL
结果:
10030
10033
如您所见,该列表中缺少10031和10035.
答案 0 :(得分:0)
也许这样的事情是一个起点。未经测试,但可能正常工作
SELECT @min := (SELECT min(id) FROM yourtable); // get the smallest ID in the table
SELECT @last := @min; // cache the min value for the where clause
SELECT id, id - @last AS difference, @last := id
FROM yourtable
WHERE id > @min
ORDER BY id ASC
HAVING difference > 1
它不会给你个别缺失的ID,但它会告诉你差距在哪里,它们有多大。