日期:2014-05-18  浏览次数:20849 次

sql快速查询实现
数据库中存在一张表:Account。该表至少有一个字段AccountID,类型是整数型,并且是主键。
表中的部分数据如下(按照AccountID进行排序):

Table: Account
--------------------------------
|AccountID | 其他字段略
|-------------------------------
| 1 |
| 2 |
| 3 |
| 4 |
| 9 |
|10 |
|11 |
|20 |
--------------------------------
可以看出,目前表中的AccountID的数值不是连续的。
要求:
(1)请编写一个SQL语句,找出表中缺少的AccountID中,最小的一个。上表中缺少的最小的AccountID应该是5。
 (2)不要用游标,最好些一个嵌套的sql.

------解决方案--------------------
declare @a table(Account int)
insert into @a values(1 ) 
insert into @a values(2 ) 
insert into @a values(3 ) 
insert into @a values(4 ) 
insert into @a values(9 ) 
insert into @a values(10 ) 
insert into @a values(11 ) 
insert into @a values(20 )
--缺失最小的ID号
SELECT CASE WHEN NOT EXISTS(SELECT * FROM @a WHERE Account = 1) THEN 1 ELSE MIN(Account) + 1 END FROM @a AS A WHERE NOT EXISTS (SELECT * FROM @a AS B WHERE B.Account = A.Account + 1)