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

在SQLServer中进行分页查询时,遇到数据错乱的问题。通过三层嵌套查询解决,关键在于明确`TOP`关键字后的排序依据。原始查询因未指定排序导致结果不正确,修正后的查询在子查询中加入了基于`row_number()`的升序排序,再在外层按降序排列,确保获取预期的数据范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


碰到个问题,在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, 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'order by n asc
          ) t1 


order by t1.n desc


  ) t2 order by t2.n sac



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值