1

我有一张有几十万条记录的大桌子。尽管数字序列中缺少一些,但它们都具有第一列的唯一 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。

4

1 回答 1

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,但它会告诉您差距在哪里,以及差距有多大。

于 2013-07-25T15:04:54.427 回答