VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2624|回复: 4

关于随机查询的疑问

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-25 15:00:01 | 显示全部楼层 |阅读模式

如题:我想从一个表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;


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

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

使用道具 举报

0

主题

114

帖子

69.00

积分

新手上路

Rank: 1

积分
69.00
发表于 2020-9-26 13:15:01 | 显示全部楼层


可以用这个句子:
select top 1 * from tableA order by newid()
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-9-27 15:00:01 | 显示全部楼层
方法一是从记录中选出一条记录,然后对这一条记录随机排序
方法二是把所有记录随机选出,然后选出第一条

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

使用道具 举报

0

主题

22

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-9-27 15:15:01 | 显示全部楼层
tran123

正解
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-9-27 15:30:01 | 显示全部楼层
一楼是SQLSERVER的写法吧
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表