例如數據庫表 table 結構和數據以下,要求使用sql語句查詢出連續整數id中,缺失的最小和最大id。sql
從數據來看,最終結果應該爲:最小 4,最大 14。數據庫
id |
1 |
2 |
3 |
5 |
7 |
8 |
10 |
15 |
16 |
1、獲取缺失的最小idspa
能夠在現有的全部id加1,select id+1 from table; 獲得ci
2 |
3 |
4 |
6 |
8 |
9 |
11 |
16 |
17 |
因爲id序列是以整數+1的形式遞增,那麼這個序列中必然存在最小的缺失id,table
去掉表中存在的id,並獲得最小值就是咱們須要的結果。select
select MIN(id+1) from table t1
where not exists(select * from table t2 where t2.id = t1.id + 1);sql語句
2、獲取缺失的最大id數據
與上面的操做相反,查詢id減1的數字序列 select id+1 from table;查詢
0 |
1 |
2 |
4 |
6 |
7 |
9 |
14 |
15 |
去掉表中已有id,注意範圍不能超過表中最大idtab
select MAX(id-1) from table t1
where not exists(select * from table t2 where t2.id = t1.id - 1)
and id < (select MAX(id) from table)
獲得14