SQL功力很深的朋友进来看一下。

devecom 2004-10-17 09:42:23
谢谢您的光临!
我有这么2个表(简化了):
t_bmh: //保密号表
bmhstart int //起始保密号
bmhend int //结束保密号

t_point: //分数表
bmh int //保密号
point numeric //分数
{
意思是这样的:
我在t_point分数表中录入保密号及其分数,现在我需要查出没有录入的保密号,也就是有
断续的,比如我在t_bmh表中设置的保密号范围是:1--5000
而我在分数表中只录入了1,10,50,那么需要查找出没有录入的那些:2...9,11..49,51..5000
用什么sql能做到?
}
...全文
232 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shxng 2004-10-18
  • 打赏
  • 举报
回复
zjcxc(邹建) 就是厉害呀!!
readersm68 2004-10-17
  • 打赏
  • 举报
回复
水平一般的才在这混。我说我自己啊:)
readersm68 2004-10-17
  • 打赏
  • 举报
回复
对于记录数少于1万条可以用啊。
hsmserver 2004-10-17
  • 打赏
  • 举报
回复
地主水平不错

你喜欢用游标?
看到你给很多人解答问题,都用道它
俺是向来不喜欢用它
除非万不得以
readersm68 2004-10-17
  • 打赏
  • 举报
回复
呵呵最后一行也有问题
SET @OutString=@OutString+CONVERT(varchar(10),@Num+1)+'..' CONVERT(varchar(10),@MaxNum)
readersm68 2004-10-17
  • 打赏
  • 举报
回复
IF @Num>@MinNum AND @Num<@MaxNum
BEGIN
SET @OutString = @OutString+CONVERT(varchar(10),@MinNum)+'..' CONVERT(varchar(10),@Num-1)
SET @MinNum=@Num+1 --这个地方写错了
END
readersm68 2004-10-17
  • 打赏
  • 举报
回复
利用存储过程。其他好的方法可能要去数据库开发问邹建了。

CREATE PROCEDURE bmhSp_StaticNum
@OutString varchar(1000) Out --定义输出值
AS
DECLARE
@Num integer,
@MaxNum integer,
@MinNum integer

Select @MaxNum=bmhend ,@MinNum=bmhstart
FROM t_bmh

SET @OutString =''

/*建立t_point表的游标Cursor*/
DECLARE t_point CURSOR LOCAL FOR
SELECT bmh
FROM t_point
Order by bmh
OPEN t_point
FETCH NEXT FROM t_pointINTO @Num
WHILE @@FETCH_STATUS = 0
BEGIN
IF @Num>@MinNum AND @Num<@MaxNum
BEGIN
SET @OutString = @OutString+CONVERT(varchar(10),@MinNum)+'..' CONVERT(varchar(10),@Num-1)
SET @Num=@MinNum+1
END
FETCH NEXT FROM t_point INTO @Num
END
CLOSE t_point
DEALLOCATE t_point
SET @OutString=@OutString+CONVERT(varchar(10),@Num)+'..' CONVERT(varchar(10),@MaxNum)

/*-----------------------------------------------------*/
GO


gwolf 2004-10-17
  • 打赏
  • 举报
回复
:(偶打字太慢了,提交才发现已经有正确答案了
gwolf 2004-10-17
  • 打赏
  • 举报
回复
不好意思,理解错了。
想了半天,你既然没有录入,怎么查呢?我想是不是把表中BMH字段值全取出来,做为集合,然后判断,集合[1..5000]中有,但取出来的里面没有的值。
devecom 2004-10-17
  • 打赏
  • 举报
回复
谢谢大家,解答请看:
http://community.csdn.net/Expert/topic/3464/3464535.xml?temp=.4031488
hsmserver 2004-10-17
  • 打赏
  • 举报
回复
楼主的意思是说有多少个保密号就要对应的生成多少个没有的范围?
devecom 2004-10-17
  • 打赏
  • 举报
回复
我想楼上的朋友还没完全理解我的意思。
你的sql只是查找一个表的id是否存在另外一个表的id,而我这里是一个范围。
gwolf 2004-10-17
  • 打赏
  • 举报
回复
SELECT pub_name
FROM publishers
WHERE pub_id NOT IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
//使用not in,这个例子,表名及字段改一下,应该是你要的

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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