2010-12-06 67 views

回答

6

必須在此代碼段中定義「前10個」,它是「某件事」。這是SQL Server 2000 +

select top 5 
    * 
from 
    (
    select top 10 * from <table> 
    order by something --got to have soemthing here to define "first 10" 
    ) as a 
order by 
    newid() 

編輯:

爲什麼你需要ORDER BY派生表

-- large row, same result with and without index/PK 
CREATE TABLE #foo (bar int /*PRIMARY KEY NONCLUSTERED (bar)*/, eejit char(8000)) 

--create rows with value 1-10 + some others 
INSERT #foo (bar) VALUES (1) 
INSERT #foo (bar) VALUES (10) 
INSERT #foo (bar) VALUES (20) 
INSERT #foo (bar) VALUES (2) 
INSERT #foo (bar) VALUES (5) 
INSERT #foo (bar) VALUES (45) 
INSERT #foo (bar) VALUES (99) 
INSERT #foo (bar) VALUES (3) 
INSERT #foo (bar) VALUES (9) 
INSERT #foo (bar) VALUES (7) 
INSERT #foo (bar) VALUES (6) 
INSERT #foo (bar) VALUES (4) 
INSERT #foo (bar) VALUES (8) 

--create logical fragmentation 
DELETE #foo WHERE bar IN (1, 3, 5, 7, 9) 
INSERT #foo (bar) VALUES (1) 
INSERT #foo (bar) VALUES (3) 
INSERT #foo (bar) VALUES (5) 
INSERT #foo (bar) VALUES (7) 
INSERT #foo (bar) VALUES (9) 

-- run this a few times, you will see values > 10 
-- "first 10" surely means values between 1 and 10? 
select top 5 
    * 
from 
    (
    select top 10 * from #foo 
    ) as a 
order by 
    newid() 

-- always <= 10 because of ORDER BY 
select top 5 
    * 
from 
    (
    select top 10 * from #foo 
    order by bar --got to have soemthing here to define "first 10" 
    ) as a 
order by 
    newid() 
1

不知道你想做什麼,但是這可能會幫助(在MySQL):

SELECT col1, col2, ... FROM tablename ORDER BY RAND() LIMIT 5 

使用RAND()LIMIT以達到期望目標。

2
select * 
from 
    (select * from table order by id limit 10) as rows order by rand() limit 5