有这样一张表:

create table tb_lostid(
id number(6,0) primary key not null,
name nvarchar2(20) not null
)

可以这样给它充值:

insert into tb_lostid
select rownum,
dbms_random.string('*',dbms_random.value(1,20))
from dual
connect by level<10000

然后删掉几条记录,以此来模拟误操作:

delete from tb_lostid where id in (3,107,234,888,907)

误操作发生后,任务是要把缺失的记录找出来,这里有两种解决方案。

一种是反联结方案,这种方案利用id连续的特点以id+1在自身中查找,找不到时则为缺失的id,最后去除尾记录就行了。

select a.id+1 from tb_lostid a where not exists (select null from tb_lostid b where b.id=a.id+1)
and a.id<> (select max(id) from tb_lostid)

运行结果:

SQL> select a.id+1 from tb_lostid a where not exists (select null from tb_lostid b where b.id=a.id+1)
2 and a.id<> (select max(id) from tb_lostid); A.ID+1
----------
3
107
234
888
907

另外一种左联结方案,它也是利用id+1在自身中找,找不到补空的记录即为要找的记录,最后也要去除尾记录。

select a.id+1 from tb_lostid a left join tb_lostid b on b.id=a.id+1
where b.id is null and
a.id<> (select max(id) from tb_lostid)

执行结果:

SQL> select a.id+1 from tb_lostid a left join tb_lostid b on b.id=a.id+1
2 where b.id is null and
3 a.id<> (select max(id) from tb_lostid); A.ID+1
----------
3
107
234
888
907

--2020年2月24日--

在一张id连续的表中找出缺失的id的更多相关文章

  1. (高难度SQL)从产品表中找出相同前缀 (都云作者痴 谁解其中味)

    --期盼值 找出AA,3;PDST,3;QPL-,3;TP-,2; --基本表 create table tb_product( id number(9,0) primary key, name nv ...

  2. 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据

    A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...

  3. php实例根据ID删除mysql表中的数据

    在动态网站开发中,我们经常要根据ID删除表中的数据,例如用户删除帖子,就需要根据ID删除帖子.本文章向大家介绍php根据ID删除表中数据的实例,需要的朋友可以参考一下本文章的实例. php实例根据ID ...

  4. 如何在数据表当中找出被删掉的数据行ID

    这个问题是一年前我刚步入IT行业的一个面试题,当时抓破头皮都想不到的问题,但现在回想过去自身不禁感到可笑,不多扯直接写解决方案.如何在数据表当中找出被删掉的数据行ID,意思是:在一堆的数据当中,让你找 ...

  5. 在由N个元素构成的集合S中,找出最小元素C,满足C=A-B,其中A,B是都集合S中的元素,没找到则返回-1

    package bianchengti; /* * 在由N个元素构成的集合S中,找出最小元素C,满足C=A-B, * 其中A,B是都集合S中的元素,没找到则返回-1 */ public class f ...

  6. ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)

    1061: 从三个数中找出最大的数 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 124[Submit][Status][We ...

  7. hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  8. 如何在 Linux 中找出最近或今天被修改的文件

    1. 使用 ls 命令,只列出你的 home 文件夹中今天的文件. ls -al --time-style=+%D | grep `date +%D` 其中: -a- 列出所有文件,包括隐藏文件 -l ...

  9. 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)

    前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆, ...

随机推荐

  1. Zookeeper学习(一)

    一.Zookeeper理解与选举机制 ①Zookeeper理解 概念:Zookeeper 是一个开源的分布式协调服务框架 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题 特点:Zooke ...

  2. JavaFX桌面应用-MVC模式开发,“真香”

    使用mvc模块开发JavaFX桌面应用在JavaFX系列文章第一篇 JavaFX桌面应用开发-HelloWorld 已经提到过,这里单独整理使用mvc模式开发开发的流程. ~ JavaFX桌面应用开发 ...

  3. C#LeetCode刷题之#59-螺旋矩阵 II(Spiral Matrix II)

    目录 问题 示例 分析 问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3678 访问. 给定一个正整数 n,生成一 ...

  4. Spring同时集成JPA与Mybatis

    @ 目录 ORM Spring ORM Spring ORM 同时集成JPA与Mybatis 一.创建一个SpringBoot项目 二.建立用户信息登记表 三.Web应用项目集成mysql 四.添加S ...

  5. vue的使用规范之v-if 与 v-for 一起使用

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中 所以,不推荐v-if和v-for同时使用 使用推荐方 ...

  6. kafka-clients 1.0 高阶API消费消息(未完)

    消费消息的请求(按序) org/apache/kafka/common/requests/RequestHeader org/apache/kafka/common/requests/ApiVersi ...

  7. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

  8. IE9知识点汇总

    1.首先ie9不支持flex布局,只能使用float,要想支持ie低版本,两者要同时使用. 2.input框不支持placeholder属性,只能自己加span标签模拟出来,调整样式. 3.单个css ...

  9. jQuery - AJAX笔记

    @ 目录 什么是AJAX 关于 jQuery 与 AJAX jQuery AJAX 参考手册 jQuery ajax - ajax() 方法 定义和用法 语法 参数 options async bef ...

  10. 使用Spring Cloud Config统一管理配置,别再到处放配置文件了

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 可配置是一个成熟软件系统应该提供的特性,而配置管理对于大型系统就显得十分重要,特别是对于拥有多个应用的微服务系统.可喜的是, ...