在和小伙伴讨论问题的时候,小伙伴突然问了我这样一个小问题,数据库中如何查找连续编号中的缺失编号?
1.描述
场景大概是这样,有一份连续数据ID:1 … 27,其中ID:6,7,14的数据丢了。结构如下:
1 | CREATE TABLE `letter` ( |
怎么把6,7,14这三条数据找出来?方法有很多种哈,今天我们说一下如何利用SQL快速查询出来。大概思路是把ID+1,然后查询ID+1这个值是否存在ID列表中,如果不存在那肯定就是缺失的。SQL如下:
1 | SELECT |
但是这样会有一个小问题,就是MAX(id)+1(27)也会被查询出来,所以:
1 | SELECT |
2.优化
1 | SELECT |
这种情况适用于查找整数类型的连续编号,那么如果编号是string类型的呢?后面有机会再补充进来=,=。