我在这张桌子上工作:
使用IsAdmin
列进行分页时,结果将包含重复的行。这是我的问题:
SELECT [UserId],[IsAdmin],[Date] FROM [Groups].[GroupMembers]
WHERE ([GroupId] = 5)
ORDER BY [IsAdmin] DESC
OFFSET 0 ROWS FETCH NEXT 6 ROWS ONLY
第二个问题:
SELECT [UserId],[IsAdmin],[Date] FROM [Groups].[GroupMembers]
WHERE ([GroupId] =5)
ORDER BY [IsAdmin] DESC
OFFSET 6 ROWS FETCH NEXT 6 ROWS ONLY
两个查询的结果是:
但是如果用户使用Date
列,我会得到没有重复的结果。
我的问题是为什么使用布尔值产生重复的行?
答案 0 :(得分:3)
问题在于您的订单是非确定性的。因为有很多行是Admin = 0,所以你不能保证每次都会选择相同的行。
如果您将查询更改为
SELECT [UserId],[IsAdmin],[Date] FROM [Groups].[GroupMembers]
WHERE ([GroupId] = 5)
ORDER BY [IsAdmin] DESC, [UserId]
然后你不会让同一行出现两次(假设[UserId]是唯一的)。
实际上,这仍然不能保证一行不会出现两次。如果在调用之间插入行,并且新行将出现在当前页面上,则当前页面上实际显示的某些行将在下一页上重新显示,因为它们已按顺序排列。/ p>