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

tjjkelly 2009-08-24 11:10:05
加精
工作中遇到一个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。
...全文
2684 79 打赏 收藏 转发到动态 举报
写回复
用AI写文章
79 条回复
切换为时间正序
请发表友善的回复…
发表回复
leio 2010-01-13
  • 打赏
  • 举报
回复
凑个热闹


select min(c.a) from
(select b.id as id,@id-1+row_number() over() as a
from t_user as b where b.id > @id-1 order by id) as c
where c.id <> c.a
;

feegle_develop 2010-01-07
  • 打赏
  • 举报
回复

--没取那么多数据,但方法类似...
create table k
(
[id] int,
[name] varchar(10)
)

insert into k values (1,null)

insert into k values (2,null)

insert into k values (5,null)

insert into k values (6,null)

insert into k values (7,null)

insert into k values (9,null)

select * from k

declare @id int
set @id=1
while @id<(select max(id) from k)
begin
if (select count(*) from k where [id]=@id)=0
begin
print @id
end
set @id=@id+1
end
maitianhust 2009-12-28
  • 打赏
  • 举报
回复
帮顶。
royliaoy 2009-10-13
  • 打赏
  • 举报
回复
学习了
clisav 2009-09-07
  • 打赏
  • 举报
回复


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查询 这本书上有类似的例子。
[/Quote]

调整一下:
select case Min(T_User.Id + 1) when null then 4 else Min(T_User.Id + 1) endfrom T_User
where not Exists(select * from T_User as T where T.Id = T_User.Id + 1) and T_User.id > @Id
mujian1986 2009-09-01
  • 打赏
  • 举报
回复
同意10楼
海楓 2009-08-29
  • 打赏
  • 举报
回复
10樓兄弟用法夠精練,喜歡。
Dgenerous 2009-08-28
  • 打赏
  • 举报
回复
10楼的思路完全正确撒
tddw 2009-08-28
  • 打赏
  • 举报
回复

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


不用看了,10楼的这条语句是正解
dabao0335 2009-08-28
  • 打赏
  • 举报
回复
太有难度了吧
tonny_123 2009-08-27
  • 打赏
  • 举报
回复
你提到的这个很有用,学习中。
yankunlin 2009-08-27
  • 打赏
  • 举报
回复
你发的问题是不是有点问题????????...是不是打错了?????
ljw5810 2009-08-27
  • 打赏
  • 举报
回复
学习了,我只会循环
island_wo 2009-08-27
  • 打赏
  • 举报
回复
刚刚想学,呵呵,学好后告诉你
loveu0508 2009-08-27
  • 打赏
  • 举报
回复
存储过程搞定!!
sasasd 2009-08-27
  • 打赏
  • 举报
回复
我弄了一下 但是就是不对哦 哎
学习一下。
tjsjj_185 2009-08-27
  • 打赏
  • 举报
回复
哇,不错的帖子,学习了
wzxiaozhuang 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 60 楼 fallen934985 的回复:]
还是存储过程好
[/Quote]顶
Fallen934985 2009-08-26
  • 打赏
  • 举报
回复
还是存储过程好
java_quanizhao 2009-08-26
  • 打赏
  • 举报
回复
呵呵,这个还真有点意思哦
select * from 表 order by id desc
不知道是不是你要用的
加载更多回复(57)

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧