数据库中存在一张表:Account。该表至少有一个字段AccountID,类型是整数型,并且是主键。
表中的部分数据如下(按照AccountID进行排序):Table: Account
--------------------------------
|AccountID | 其他字段略
|-------------------------------
| 1 |
| 2 |
| 3 |
| 4 |
| 9 |
|10 |
|11 |
|20 |
--------------------------------
可以看出,目前表中的AccountID的数值不是连续的。
要求:
(1)请编写一个SQL语句,找出表中缺少的AccountID中,最小的一个。上表中缺少的最小的AccountID应该是5。
 (2)不要用游标,最好些一个嵌套的sql.

解决方案 »

  1.   

    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)
      

  2.   

    先建立一张简易表biao1,只有一个字段(accountid),
    元素为1到max(account.accountid)然后对比两表就出来了
    select min(biao1.accountid)
    from biao1,account
    where  biao1.accountid not in(select account.accountid from account)
      

  3.   

    http://topic.csdn.net/u/20070523/15/b585b761-9b97-474b-9be9-e7c5f3aa2771.html
      

  4.   

    select Top 1 b.id from (select id =(select count(*) from Account where AccountID    > =a.AccountID),AccountID from Account a) b where b.id    < b.AccountID