select top 1 *每次都返回不同的记录集

时间:2009-09-30 08:38:23

标签: sql sql-server

在我的应用程序中,我使用SELECT TOP 12 *子句从数据库中选择前12条记录并将其显示给用户。在另一种情况下,我必须逐一显示相同的结果。所以我使用SELECT TOP 1 *子句,其余的查询是一样的。我使用Sql row_number()函数逐个选择项目。

问题是SELECT TOP 1 *没有给我返回与SELECT TOP 12 *相同的行。每次执行查询时,SELECT TOP 12 *的结果集也会更改。

任何人都可以解释为什么在SELECT TOP 12 *和SELECT TOP 1 *中结果不一样。

仅供参考:这是我的sql

select distinct top 1 *  from( 
select row_number() over (  ORDER BY Ratings desc  ) as Row, * from( 
SELECT vw.IsHide, vw.UpdateDate, vw.UserID, vw.UploadPath, vw.MediaUploadID, vw.Ratings, vw.Caption, vw.UserName, vw.BirthYear, vw.BirthDay, vw.BirthMonth, vw.Gender, vw.CityProvince, vw.Approved 
FROM VW_Media as vw ,Users as u WITH(NOLOCk) 
WHERE vw.IsHide='false' and 
GenderNVID=5 and 
vw.UserID=u.UserID and 
vw.UserID not in(205092) and 
vw.UploadTypeNVID=1106 and 
vw.IsDeleted='false' and 
vw.Approved = 1 and 
u.HideProfile=0 and 
u.StatusNVID=126 and 
vw.UserID not in(Select BlockedToUserID from BlockList WITH(NOLOCk) where UserID=205092) a) totalres where row >0

先谢谢

萨钦

2 个答案:

答案 0 :(得分:12)

当您使用SELECT TOP时,您还必须使用ORDER BY子句以避免每次都有不同的结果。

答案 1 :(得分:1)

对于性能调整,如果您没有指定任何顺序,数据库可以按照自己喜欢的任何顺序自由返回记录。

因此,如果您希望记录以任何特定顺序排列,您始终必须指定记录的顺序。

在某些版本的SQL Server(7 IIRC)中,如果您未指定任何排序,则会在结果中保留表的自然顺序,但在以后的版本中删除了此功能。