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

发布时间:2020-10-20 整理:编程之家
编程之家收集整理的这篇文章主要介绍了关于sqlserver中的表嵌套查询数据错乱的问题编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!


碰到个问题,在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中如果你没有指定默认排序,很容易出现问题,得到的数据可能不是你预期的合理的数据。

总结

以上是编程之家为你收集整理的关于sqlserver中的表嵌套查询数据错乱的问题全部内容,希望文章能够帮你解决关于sqlserver中的表嵌套查询数据错乱的问题所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!