各位高手,我有一个表,记录数大约为30万到50万之间,我想随机从该表中取一个记录,这个SQL语句怎么写?

xiaoguoru 2005-03-01 05:21:15
各位高手,我有一个表,记录数大约为30万到50万之间,我想随机从该表中取一个记录,这个SQL语句怎么写?
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynx 2005-03-02
  • 打赏
  • 举报
回复
[Q]随机抽取前N条记录的问题
[A]8i以上版本
select * from (select * from tablename order by sys_guid()) where rownum < N;
select * from (select * from tablename order by dbms_random.value) where rownum< N;
注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数

如果你只取一条,可以使用:
select * from (select * from tablename order by sys_guid()) where rownum < 2;
select * from (select * from tablename order by dbms_random.value) where rownum< 2;
xiaoguoru 2005-03-02
  • 打赏
  • 举报
回复
楼上的,我不知怎么用?
xxc1981 2005-03-02
  • 打赏
  • 举报
回复
分页可以用类似下面的sql语句,正常的分页是要排序的,但对于这个问题,排序可以省略
select *
from (select ROWNUM MYROWNUM, T.*
from RECORD_FAULT_INFO T
where ROWNUM < m+1)
where MYROWNUM > m-1
xxc1981 2005-03-02
  • 打赏
  • 举报
回复
lynx(lynx) 的方法固然巧妙,但我认为这个方法在大数据量的时候会很慢.
我觉得应当这样做:
现查出表的总记录n,
在1-n之间随机选择一个数字m.
利用分页原理,直接查询出第m条记录.
chanet 2005-03-01
  • 打赏
  • 举报
回复
reference DBMS_RANDOM

http://www.oracle.com.cn/onlinedoc/appdev.920/a96612/d_rando2.htm#998106

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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