日期:2014-05-17  浏览次数:20872 次

关于随机查询的疑问

如题:我想从一个表A里面随机抽取一条记录,我用了两种方法,但得到的结果完全不同,请教各位大虾:


方法一:
select   *   from   tableA   where   rownum   <   2   order   by   dbms_random.random;

方法二:
select   *   from   (select   *   from   tableA   order   by   dbms_random.random)   where   rownum   <   2;


方法一每次都筛选出同一条记录
方法二每次都筛选出不同的记录

请问为什么第一种方法就不行呢?按道理两种方法都是先随机排序,再筛选。为什么第一种方法就不行呢?

------解决方案--------------------
方法一是从记录中选出一条记录,然后对这一条记录随机排序
方法二是把所有记录随机选出,然后选出第一条

select ... where ... order by 先选出符合条件的记录,然后对记录排序,难道不是这样的吗?