在我的应用程序中,我使用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
先谢谢
萨钦
答案 0 :(得分:12)
当您使用SELECT TOP时,您还必须使用ORDER BY子句以避免每次都有不同的结果。
答案 1 :(得分:1)
对于性能调整,如果您没有指定任何顺序,数据库可以按照自己喜欢的任何顺序自由返回记录。
因此,如果您希望记录以任何特定顺序排列,您始终必须指定记录的顺序。
在某些版本的SQL Server(7 IIRC)中,如果您未指定任何排序,则会在结果中保留表的自然顺序,但在以后的版本中删除了此功能。