当前位置: 代码迷 >> DB2 >> 请问一下小弟我这个sql的思路该真么写?(能否用一个sql搞定)
  详细解决方案

请问一下小弟我这个sql的思路该真么写?(能否用一个sql搞定)

热度:1331   发布时间:2013-02-26 00:00:00.0
请教一下我这个sql的思路该真么写?(能否用一个sql搞定)
工作中遇到一个sql,请教各位以下问题,点拨一下思路和解决办法,谢谢!!

主要是个user master表,id为主键,如下例
T_USER

ID(number(2)) NAME(nvarchar2(2)) 
1 张三
2 ..
3 ..
6 ..
7 ..
10 ..
..
99

现在的目的是需要进行这样的查询:

输入 id = 1为检索条件,这个时候需要返回的结果集是 id = 4;
输入 id = 4为检索条件,这个时候需要返回的结果集是 id = 4;
输入 id = 6为检索条件,这个时候需要返回的结果集是 id = 8;
输入 id = 99为检索条件,这个时候需要返回的结果集是 id = 4(也就是重新从1开始进行检索);

这个sql想达到的目的是输入一个值,sql就可以在数据库中找到这个大于等于这个值且在数据库中不存在的id,如果该值存在就依次+1去重新进行检索直至找到不存在的ID。

------解决方案--------------------------------------------------------
就是找到缺失的Id

select Min(T_User.Id + 1)
from T_User
where not Exists(select * from T_User as T where T.Id = T_User.Id + 1) and T.User > @Id

SQL Server 2005 技术内幕:T-SQL查询 这本书上有类似的例子。
  相关解决方案