超级难的SQL语句,应该是无解,有谁愿意再试一试?

Jack_Loo 2002-01-12 11:00:24
没办法了,不写的哗众取宠就没人看。
有表tb,中只有字段fld整型,
用一句SQL语句查找在表中的最大值和最小值之间的(不包括最大值和最小值)在表中不存在的值。

1
2
6
9
则查找记录应为
3
4
5
7
8
有难度吧?
但听说oracle有个整数集合,不知是否真的?要是有的话,并且可以是有限集的话就可以做了。
...全文
133 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Loo 2002-07-18
  • 打赏
  • 举报
回复
我最后是程序中先创建一个临时表,把最小值到最大值的自然数全插进去,然后一个SQL语句关联出来。
现在觉得仅SQL语句是肯定做不出来。
suyj77 2002-02-25
  • 打赏
  • 举报
回复
在表中都不存在还查找什么??
qq5552661 2002-02-09
  • 打赏
  • 举报
回复
分开几次不好么?
RichRiver 2002-01-26
  • 打赏
  • 举报
回复
唉,别傻了,这样的Sql语句慢的要死,还是用存储过程吧!
赵立2 2002-01-25
  • 打赏
  • 举报
回复
select vol from all_integer having vol>min(vol) and vol<max(vol)
mike_541 2002-01-23
  • 打赏
  • 举报
回复
fld 的取值会受到ROWNUM 的限制
icevi 2002-01-18
  • 打赏
  • 举报
回复
all_objects是系统表吗?能保证记录数够用?
oldwain 2002-01-18
  • 打赏
  • 举报
回复
ORACLE下的解决方法(仅适用于ORACLE!)

select * from
(select rownum rn from all_objects)
where rn > (select min(fld) from tb)
and rn < (select max(fld) from tb)
and rn not in (select fld from tb);


测试样例及结果:

scott@ORCL> select * from tb;

FLD
----------
1
2
6
9

scott@ORCL> select * from
2 (select rownum rn from all_objects)
3 where rn > (select min(fld) from tb)
4 and rn < (select max(fld) from tb)
5 and rn not in (select fld from tb);

RN
----------
3
4
5
7
8

scott@ORCL>


===========================
oldwain
---------------------------
http://www.itpub.net/index.php?referrerid=32
http://www.linuxforum.net/
http://www.oraclefan.net/


icevi 2002-01-18
  • 打赏
  • 举报
回复
有BUG:(

断号的数不能多于现有的数:(

再看看。。
icevi 2002-01-18
  • 打赏
  • 举报
回复
看看这个:
select t5.fld+t6.fcount as fbrknumber
from
(
select t3.fld,t4.fld-t3.fld-1 as fbrkcount
from
(select t1.fld,count(t2.fld)-1 as fcount
from ccc t1 join ccc t2 on t1.fld<=t2.fld
group by t1.fld) t3 left join
(select t1.fld,count(t2.fld)-1 as fcount
from ccc t1 join ccc t2 on t1.fld<=t2.fld
group by t1.fld) t4
on t3.fcount=t4.fcount+1
where t4.fld<>t3.fld+1
) t5,
(select t1.fld,count(t2.fld)-1 as fcount
from ccc t1 join ccc t2 on t1.fld<=t2.fld
group by t1.fld) t6
where t6.fcount<=t5.fbrkcount and t6.fcount>0
order by t5.fld+t6.fcount

搞定。
rightyeah 2002-01-17
  • 打赏
  • 举报
回复
有难度
如果有整数集合就可以做了,而且很容易,没有什么问题的。如果没有,那么只好sorry了,除非不限制只能用一句sql,因为sql语句的功能是查询,而不是无中生有
huang221 2002-01-17
  • 打赏
  • 举报
回复
同意: zds0707(周) 
xd521 2002-01-16
  • 打赏
  • 举报
回复
就用偶上面的上面的吧
superjj2002 2002-01-14
  • 打赏
  • 举报
回复
不明白为什么非要写成一句sql?
不知道你的应用是什么,可以说吗?
效率是个问题。
bigeyes1999 2002-01-14
  • 打赏
  • 举报
回复
用存储过程很简单,手头没有sql工具,但用存储过程是很好实现的.基本跟一般的编程做法差不多,设几个中间变量,不用给我分,但请试一试,有时很纳的查询用存储过程出奇的简单.
zds0707 2002-01-14
  • 打赏
  • 举报
回复
select flg from tb
where flg not in
(select flg from tb
where flg between (select min(flg) from tb)and
(select max(flg) from tb ))
Tommy Chang 2002-01-14
  • 打赏
  • 举报
回复
单靠sql不可能做到。

随便给个固定的整数1、9,将之间的所有整数作为结果集返回,这个sql就做不到。如果做到的话,就可以解决上面的问题。

select * from all_integer where vol>1 and vol<9这个显然不现实,因为不可能将无穷大保存在一张现实的数据库表里面。

但是如果加上一些限制条件就有可能通过一些方法实现,比如临时表、存储过程、边界限制之类的东东。

:)

7,394

社区成员

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

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