我想先选择10行,然后选择其中的5行。
答案 0 :(得分: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 :(得分:2)
select *
from
(select * from table order by id limit 10) as rows order by rand() limit 5
答案 2 :(得分:1)