在一张id连续的表中找出缺失的id
有这样一张表:
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的更多相关文章
- (高难度SQL)从产品表中找出相同前缀 (都云作者痴 谁解其中味)
--期盼值 找出AA,3;PDST,3;QPL-,3;TP-,2; --基本表 create table tb_product( id number(9,0) primary key, name nv ...
- 转 A 、B两张表,找出ID字段中,存在A表,但是不存在B表的数据
A.B两张表,找出ID字段中,存在A表,但是不存在B表的数据,A表总共13W数据,去重后大约3万条数据,B表有2W条数据,且B表的ID有索引. 方法一 使用not in,容易理解,效率低. selec ...
- php实例根据ID删除mysql表中的数据
在动态网站开发中,我们经常要根据ID删除表中的数据,例如用户删除帖子,就需要根据ID删除帖子.本文章向大家介绍php根据ID删除表中数据的实例,需要的朋友可以参考一下本文章的实例. php实例根据ID ...
- 如何在数据表当中找出被删掉的数据行ID
这个问题是一年前我刚步入IT行业的一个面试题,当时抓破头皮都想不到的问题,但现在回想过去自身不禁感到可笑,不多扯直接写解决方案.如何在数据表当中找出被删掉的数据行ID,意思是:在一堆的数据当中,让你找 ...
- 在由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 ...
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- 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 ...
- 如何在 Linux 中找出最近或今天被修改的文件
1. 使用 ls 命令,只列出你的 home 文件夹中今天的文件. ls -al --time-style=+%D | grep `date +%D` 其中: -a- 列出所有文件,包括隐藏文件 -l ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆, ...
随机推荐
- Spring Boot 项目几种启动方式
Spring Boot 项目几种启动方式 1. 使用 main 启动 jar xxxx.jar 2. 使用 mvn 启动 mvn spring-boot:run 3. 使用 Spring Boot c ...
- TortoiseGit的使用(一)
博客园换了新颜,立刻给我的感觉就是还不如原来的老古董界面呢.没办法呀,毕竟主要是习惯了.咱也不吐槽了,慢慢地,习惯就好,博客园也在逐步改善. 目录 Git和TortoiseGit下载安装 稍微笼统地介 ...
- HTTP PUT/POST/PATCH的区别
幂等 idempotent 幂等操作的特定就是其任意多次执行所产生的影响与一次执行的影响相同 POST POST 用来创建一个新的数据 POST 不是幂等的, 意味着多次操作的结果是不同的, 多次操作 ...
- 针对VM从挂机-启动后,docker相关服务的无法使用问题!
使用软件 :VMware WorkStation 使用系统:linux centOS 7 windows远程调用软件:xshell 挂机-启动状态后 先使用 service network re ...
- 漏洞重温之文件上传(FUZZ)
文件上传FUZZ思路通关upload-labs Pass-16 黑盒阶段 进入第十六关,首先我们能看到,该页面的上传点为图片上传. 首先,先把对方想的简单一点,这里虽然是上传图片,但是可能只是前端js ...
- web基础(四)严格模式与混杂模式
web基础(四)严格模式与混杂模式 一.介绍 DOCTYPE 标签是一种标准通用标记语言的文档类型声明,它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档.DO ...
- GitHub 热点速览 Vol.33:听说程序员都是颜控?
作者:HelloGitHub-小鱼干 摘要:GitHub上面除了很多有趣的项目,也有很多高颜值的项目,比如:图片共享网站 Unsplash 开源的 Dataset,提供了两百多张高颜值美照.Heroi ...
- myBatis源码解析-配置文件解析(6)
前言 本来打算此次写一篇关于SqlSession的解析,但发现SqlSession涉及的知识太多.所以先结合mybatis配置文件(我们项目中常写的如mybatisConfig.xml),来分析下my ...
- goland2019.2破解方法
第一步:下载 jetbrains-agent.jar 链接:https://pan.baidu.com/s/1V2qZokAeAGcbsKDaoD9eSw 提取码:nrce 第二步:将下载的jetbr ...
- springboot + mybatisPlus 入门实例 入门demo
springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ...