Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1693467
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-08-12 22:36:37

需求如下:在一个 NUMBER 类型的列中,本应为连续的数字,由于修改变得不连续了。比如是这样的(test_yct.id):
 
SQL> desc test_yct;
Name Type         Nullable Default Comments
---- ------------ -------- ------- --------
ID   NUMBER       Y                        
NAME VARCHAR2(20) Y            
 
SQL> select * from test_yct;
 
ID NAME
-- ------------------------------------------
 1 yct1
 2 yct2
 3 yct3
 5 yct5
 6 yct6
 9 yct9
10 yct10
11 yct11
13 yct13
 
9 rows selected
 
现在要从该表中查询最小的断号,对于上面的数据,应该查询出数值“4”;如果没有断号,那么应该查询的结果为“最大 ID + 1”。下面我们用一个 SQL 来实现它:
 
SQL> SELECT MIN(ID)
  2    FROM (SELECT MIN(A.ID) + 1 ID
  3            FROM TEST_YCT A, TEST_YCT B
  4           WHERE A.ID + 1 = B.ID(+)
  5             AND B.ID IS NULL
  6          UNION ALL
  7          SELECT MAX(ID) + 1 ID
  8            FROM TEST_YCT
  9         );
 
   MIN(ID)
----------
         7
阅读(3083) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~