2015-11-01 36 views
0

我有一个Mysql表的“序列”列,它有一个唯一键,这应该从1开始到n。Mysql发现密集的系列间隙

create table myTest(id INT, ..., sequence INT ..) 

此栏应代表密系列,所以我不想间隙插入它,我的问题是:我如何才能找到可能存在的差距?

我的第一个想法是从插入到临时1列表中的所有值以MAX(序列)用回路。

create temporary table allvalues(value INT) 

然后选择该临时表的所有elems的地方量值不MYTEST表:

select value from allvalues where value is not in (select sequence from myTest) 

是否有其他更好的/最快的解决方案?

+0

请在问题给出不同的表名 –

+0

好吧,我用一些表名和代码重新编写了这个问题。谢谢 – Tobia

+0

你确定会有差距吗? –

回答

0

这另一种思路,这没有找到差距,但在连续的差距情况下,只有结尾的差距:

select m1.sequence-1 from myTest m1 
where m1.sequence>1 and not exists 
    (select * from myTest m2 where m2.sequence=m1.sequence-1) 

http://sqlfiddle.com/#!9/64f32/1

+0

是的,但这是另一个问题的解决方案,而不是您发布的问题 – kamahl

+0

当然,是的,但假设对多行应该只有少数差距可以作为查找间隙孔并查找周围数字的另一种方法。我很高兴知道这个解决方案应该比另一个更快。 – Tobia