四種資料庫,取隨機記錄的方法

來源:互聯網
上載者:User

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="*1*3*4*6*12*...."
sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0

ACCESS(二):

<%
   n=10    ''取任意10條記錄
   set rs = server.CreateObject ("adodb.recordset")
      sql = "select * from table"
      rs.open sql,conn,1,1
      count=rs.recordcount   ''記錄總數
      IF Count<>empty Then
         Randomize      
        for i = 1 to n       ''迴圈n次
           num=Fix(Rnd*count) ''num便是隨機產生的記錄行數,用Fix(),使其不會大於count值。
           rs.move num    ''移到改隨機行
           Response.write rs(0)   ''出該條記錄
        rs.movefirst     ''別忘了再把指標移到第一條
        next
      End IF
      rs.close
   set 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="*1*3*4*6*12*...."
sql="select top 10 * form yourdb where instr('*'&id&'*','"&yourstr&"')<>0

ACCESS(二):

<%
   n=10    ''取任意10條記錄
   set rs = server.CreateObject ("adodb.recordset")
      sql = "select * from table"
      rs.open sql,conn,1,1
      count=rs.recordcount   ''記錄總數
      IF Count<>empty Then
         Randomize      
        for i = 1 to n       ''迴圈n次
           num=Fix(Rnd*count) ''num便是隨機產生的記錄行數,用Fix(),使其不會大於count值。
           rs.move num    ''移到改隨機行
           Response.write rs(0)   ''出該條記錄
        rs.movefirst     ''別忘了再把指標移到第一條
        next
      End IF
      rs.close
   set rs = nothing
%>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.