Mysql,在序列中找到缺失的数字

时间:2013-07-25 14:56:33

标签: php mysql left-join

我有一张巨大的桌子,上面有几十万条记录。它们都有第一列的唯一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.

1 个答案:

答案 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,但它会告诉你差距在哪里,它们有多大。