1、Access
尽管在Access的sql视图下可以根据select top 5 * from tb order by rnd(field_id);实现,但是如果在应用程序中执行这条语句每次得到的结果总是一样;个人感觉这是由于随机种子没有被初始化。因此,需要利用程序,帮助其初始化随机种子。
System.Random rnd = new System.Random();
string iTmp = rnd.Next(10000).ToString();
string sql = "SELECT TOP 5 * FROM [tb] ORDER BY RND(-([ID] + "+iTmp+"))";
2、SQL Server
select top 5 * from tb order by newid();
3、Oracle
产生一个随机id列表,然后与实体表join得到对应的记录;因此,问题的重点在于产生一个随机id列表。
产生一个随机id列表的sql语句如下:
select trunc(dbms_random.value(1, 5000)) as id from tablename where rownum < 6;
说明:dbms_random.value(1, 5000)是取1到5000间的随机数,会有小数, trunc函数对随机数字取整,才能和临时表的整数ID字段相对应。