一道趣题.

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
有表t,中只有字段c整型,
用一句SQL语句找出在表中的最大值和最小值之间的(不包括最大值和最小值)且表中不存在的值。
比如, 表中的记录为:
1
2
6
9
则查询结果应为:
3
4
5
7
8



回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
不才,我试试:
create table test(id int);
insert into test values(1);
insert into test values(2);
insert into test values(6);
insert into test values(9);
select ID from
(select rownum id from sys.obj$
minus
select id from test)
where rownum< (select max(id) from test);
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
有点问题就是where语句写错位置了
select ID from
(select rownum id from sys.obj$
where rownum< (select max(id) from test)
minus
select id from test)
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你测试了吗?
应该是有错误的.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
看修改之后的语句
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
把测试数据中的1去掉, 看看结果是否还正确?
不过, 只能算是疏漏而已. 大体上算是对了.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
和测试数据1没有关系
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
是不是?
嘿嘿
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
这里使用sys.obj$来取得一个较长的序列值,一时想不起什么办法,我手头的库中也就这个表记录 最多,只要取得一个大于test表中id值 的序列换其它的表当然也可以.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
guo:
怎么? 换了个名字悄悄回来了?
最近还忙吗?
相比较sys.obj$, 我更喜欢用all_objects(没有权限的问题), 如果数目不够, 可以通过表自身无条件join形成一个笛卡儿积.

和测试数据1没有关系
怎么会没有关系? 我说的是 "最大值和最小值之间的", 不是"1与最大值之间"的.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行