Oracle 查找表的空缺数字

sql语句的请教?(查找连续数据中的一个空缺数据)

怎样用一条sql查找连续数据中的一个空缺数据,如:这样一个数列1,2,3,4,5,6,7,9,10,11.......
用一个语句把空缺的8找出来
请教怎样去实现这个功能
 
---建表
CREATE TABLE c_lianxushu(
c_shu NUMBER(5)
);
DELETE FROM c_lianxushu
--插入测试数据
BEGIN
FOR i IN 1..50 LOOP
INSERT INTO c_lianxushu VALUES(i);
END LOOP;
END;
COMMIT;
--查询并删除其中一条
SELECT * FROM c_lianxushu;
DELETE FROM c_lianxushu c WHERE c.c_shu='8';
--如果中间只缺一个数
SELECT max(c.c_shu)+1 FROM c_lianxushu c WHERE c.c_shu = ROWNUM;

--如果缺好几条,但不连续缺
DELETE FROM c_lianxushu c WHERE c.c_shu='30';
SELECT p.b+1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P
WHERE P.B <> (SELECT E.B - 1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E
WHERE E.A = P.A + 1);
--如果缺好几条,且连续缺
DELETE FROM c_lianxushu c WHERE c.c_shu='9';
DELETE FROM c_lianxushu c WHERE c.c_shu='10';
SELECT P.B + 1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P
WHERE P.B <> (SELECT E.B - 1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E
WHERE E.A = P.A + 1)
UNION all
SELECT P.B - 1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) P
WHERE P.B <> (SELECT E.B + 1
FROM (SELECT ROWNUM A, C.C_SHU B FROM C_LIANXUSHU C) E
结果 WHERE E.A = P.A - 1)
8
30
10
30 ....此结果升序排列后,从小往大两两结合,就是所缺数字的区间
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值