试试这个:
with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal > 10;
相关:http://www.ienablemuch.com/2012/03/possible-in-sql-server-deleting-any-row.html
的样本数据:
CREATE TABLE [beatles]
([name] varchar(14));
INSERT INTO [beatles]
([name])
VALUES
('john'),
('paul'),
('george'),
('ringo'),
('pete'),
('brian'),
('george martin');
查询:
with a as
(
select *, row_number() over(order by name) ordinal
from beatles
)
delete from a
where ordinal > 4;
select * from beatles;
之前删除:
NAME
brian
george
george martin
john
paul
pete
ringo
删除后:
NAME
brian
george
george martin
john
现场测试:http://www.sqlfiddle.com/#!3/0adcf/6
会不会选择highscore_ID子查询基础上的ID号码,而不是选择的前10分的id实际的高分? – Euthyphro
那么你必须为你的子查询返回Highscore_Id,但是,那么订单就不适合。你必须在你的表格中添加一个普通的等级并删除所有等级> 11),那么它就可以工作。 – YvesR
谢谢。 “DELETE FROM SCORE WHERE difficulty = 1 AND Highscore_ID NOT IN(SELECT TOP 10 Highscore_ID FROM Scores WHERE difficulty = 1 ORDER BY highScore DESC);” – Euthyphro