大家来讨论下这个问题!

shuncy 2002-10-09 11:17:33
现在有一个表annou,其中,id为其识别字段,现在要做一个工作。要向表中插入一条记录,要求是,如果此表中的记录有被删除的,则新增记录的id要为被删除过id的最小值,以些类推,例如:原表中现在记录id为,1,2,5,7那么下次插入的记录id则为3,再插入一条则为4,以后为6,8,9,……
要求只能用一条SQL语句来实现,我已经写出了一大半了,都能实现,语句如下:
SELECT MIN(id + 1) AS NoID
FROM annou
WHERE ((id + 1) NOT IN
(SELECT id
FROM annou))
不过现在却碰到这样一个问题,比如说,现在我把1,2条记录删除以后,那么,此条语句所找出来的最小值不会是1,而是6,但是,实际上应该找出的是1,所以希望大家继续我这个问题的讨论,看有什么好的解决办法,或者有更好的方法,都希望能提出来,非常感谢!!!
...全文
37 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝天 2002-10-09
  • 打赏
  • 举报
回复
select min(a+1) from (select a from test union select 0 from test) t where not exists (select 1 from test where t.a+1 =test.a)

如此也可,呵呵
shuncy 2002-10-09
  • 打赏
  • 举报
回复
谢谢楼上的朋友,不过你还有一点小错误,应该下面这样写才完全正确、
declare @NoID int
select @NoId=
case when not exists(select id from annou where id=1) then 1
else (SELECT MIN(id + 1) AS NoID
FROM annou
WHERE ((id + 1) NOT IN
(SELECT id
FROM annou)))
end
蓝天 2002-10-09
  • 打赏
  • 举报
回复
select min(t.a+1) from (select a from test union select 0 as a from test) t where a+1 not in(select a from test)

蓝天 2002-10-09
  • 打赏
  • 举报
回复
增加一个哑元 id=0 的记录如何?
shuncy 2002-10-09
  • 打赏
  • 举报
回复
难道没有人知道吗?说两句话总行吧。我可一直等着呢。
newly_ignorant 2002-10-09
  • 打赏
  • 举报
回复
select @NoID=
case when exists(select id from annou where id=1) then 1
else SELECT MIN(id + 1) AS NoID
FROM annou
WHERE ((id + 1) NOT IN
(SELECT id
FROM annou))
end
brook_huang 2002-10-09
  • 打赏
  • 举报
回复
也可以用下面的语句:
SELECT NoID=(case when MIN(id)>1 then 1 else MIN(id)+1 end)
FROM annou
WHERE ((id + 1) NOT IN
(SELECT id
FROM annou))
蓝天 2002-10-09
  • 打赏
  • 举报
回复
就是子查询啊。查询出来的结果可以象表一样来看待
shuncy 2002-10-09
  • 打赏
  • 举报
回复
>>谢谢 sky_blue(老衲)

不过我想问一你一个问题:
我对你的语句有几处不是很明白,你可以帮我讲一下吗?
你所用的select ... from (select ...) t where ....
所用的from (select ...) t where
是什么意思呢?还忘解答.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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