加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

关于sqlserver中的表嵌套查询数据错乱的问题

发布时间:2020-12-12 12:40:08 所属栏目:MsSql教程 来源:网络整理
导读:碰到个问题,在sqlserver里对取得的数据分页,使用下面的sql: select top 5000 * from ? ( ? ? ? ? ? select top 5000 * from ( ? ? ? ? ? ? ? ? ? select top 200000 row_number() OVER (order by auto_id asc) n,t.* ? ? ? ? ? ? ? ? ? from Hdp_User_Gos


碰到个问题,在sqlserver里对取得的数据分页,使用下面的sql:



select top 5000 * from
? (
? ? ? ? ? select top 5000 * from (
? ? ? ? ? ? ? ? ? select top 200000 row_number() OVER (order by auto_id asc) n,t.*
? ? ? ? ? ? ? ? ? from Hdp_User_Goshop_Log t with(nolock,INDEX = idx_hdp_user_goshop_log_acttime)
? ? ? ? ? ? ? ? ? where t.acttime > '2014-11-12 09:00' and t.acttime < '2014-11-12 10:00'
? ? ? ? ? ) t1?


order by t1.n desc


? ) t2 order by t2.n sac


发现出现的数据并不是想象中的195000到200000,而是380000,最后的解决方式是:



select top 5000 * from
? (
? ? ? ? ? select top 5000 * from (
? ? ? ? ? ? ? ? ? select top 200000 row_number() OVER (order by auto_id asc) n,INDEX = idx_hdp_user_goshop_log_acttime)
? ? ? ? ? ? ? ? ? where t.acttime > '2014-11-12 09:00' and t.acttime < '2014-11-12 10:00'order by n asc
? ? ? ? ? ) t1?


order by t1.n desc


? ) t2 order by t2.n sac



具体原因可能是因为sqlserver中的top的排序问题,sqlserver中如果你没有指定默认排序,很容易出现问题,得到的数据可能不是你预期的合理的数据。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读