四种数据库,取随机记录的方法

mysql:select * from tablename order by rand() limit 10
sqlserver:select top 10 * from tablename order by NEWID()

ORACLE: 使用 __ dbms __ random __ value的一种方法

SQL> __ select __ *from __ (select __ *from __ t __ order __ by __ dbms_random.value) __ where __ rownum<10;

__ __ __ __ __ __ __ __ __ A
----------
__ __ __ __ __ __ __ __ 39
__ __ __ __ __ __ __ 101
__ __ __ __ __ __ __ 134
__ __ __ __ __ __ __ __ __ 5
__ __ __ __ __ __ __ __ 83
__ __ __ __ __ __ __ __ 97
__ __ __ __ __ __ __ __ 96
__ __ __ __ __ __ __ 140
__ __ __ __ __ __ __ __ 81

已选择9行。

SQL> __ select __ *from __ (select __ *from __ t __ order __ by __ dbms_random.value) __ where __ rownum<10;

__ __ __ __ __ __ __ __ __ A
----------
__ __ __ __ __ __ __ __ 27
__ __ __ __ __ __ __ 118
__ __ __ __ __ __ __ 141
__ __ __ __ __ __ __ 103
__ __ __ __ __ __ __ 128
__ __ __ __ __ __ __ __ 10
__ __ __ __ __ __ __ 142
__ __ __ __ __ __ __ __ 68
__ __ __ __ __ __ __ __ 74 __

有人说这是一种效率最差的方法,恳请告知比这更好的解决方案!

ACCESS(一):

yourstr="134612...."
sql="select top 10 * form yourdb where instr(''&id&'','"&yourstr&"')<>0

ACCESS(二):

 1   
 2n=10 ''取任意10条记录   
 3set rs = server.CreateObject ("adodb.recordset")   
 4sql = "select * from table"   
 5rs.open sql,conn,1,1   
 6count=rs.recordcount ''记录总数   
 7IF Count<>empty Then   
 8Randomize   
 9for i = 1 to n ''循环n次   
10num=Fix(Rnd*count) ''num便是随机产生的记录行数,用Fix(),使其不会大于count值。   
11rs.move num ''移到改随机行   
12Response.write rs(0) ''出该条记录   
13rs.movefirst ''别忘了再把指针移到第一条   
14next   
15End IF   
16rs.close   
17set rs = nothing   

SQL> __ select __ *from __ (select __ *from __ t __ order __ by __ dbms_random.value) __ where __ rownum<10;

__ __ __ __ __ __ __ __ __ A
----------
__ __ __ __ __ __ __ __ 39
__ __ __ __ __ __ __ 101
__ __ __ __ __ __ __ 134
__ __ __ __ __ __ __ __ __ 5
__ __ __ __ __ __ __ __ 83
__ __ __ __ __ __ __ __ 97
__ __ __ __ __ __ __ __ 96
__ __ __ __ __ __ __ 140
__ __ __ __ __ __ __ __ 81

已选择9行。

SQL> __ select __ *from __ (select __ *from __ t __ order __ by __ dbms_random.value) __ where __ rownum<10;

__ __ __ __ __ __ __ __ __ A
----------
__ __ __ __ __ __ __ __ 27
__ __ __ __ __ __ __ 118
__ __ __ __ __ __ __ 141
__ __ __ __ __ __ __ 103
__ __ __ __ __ __ __ 128
__ __ __ __ __ __ __ __ 10
__ __ __ __ __ __ __ 142
__ __ __ __ __ __ __ __ 68
__ __ __ __ __ __ __ __ 74 __

有人说这是一种效率最差的方法,恳请告知比这更好的解决方案!

ACCESS(一):

yourstr="134612...."
sql="select top 10 * form yourdb where instr(''&id&'','"&yourstr&"')<>0

ACCESS(二):

 1   
 2n=10 ''取任意10条记录   
 3set rs = server.CreateObject ("adodb.recordset")   
 4sql = "select * from table"   
 5rs.open sql,conn,1,1   
 6count=rs.recordcount ''记录总数   
 7IF Count<>empty Then   
 8Randomize   
 9for i = 1 to n ''循环n次   
10num=Fix(Rnd*count) ''num便是随机产生的记录行数,用Fix(),使其不会大于count值。   
11rs.move num ''移到改随机行   
12Response.write rs(0) ''出该条记录   
13rs.movefirst ''别忘了再把指针移到第一条   
14next   
15End IF   
16rs.close   
17set rs = nothing   
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus