当前位置: 代码迷 >> Sql Server >> 杯具了select t. from (select top 五 * from tb order by id desc) t
  详细解决方案

杯具了select t. from (select top 五 * from tb order by id desc) t

热度:513   发布时间:2016-04-24 09:45:51.0
杯具了select t.* from (select top 5 * from tb order by id desc) t
select t.* from (select top 5 * from tb order by id desc) t
MSSQL2000下子查询排序生效,MSSQL2008失效了。。。。有没有什么可以控制其生效的办法?
------解决思路----------------------
你是说最终结果没有排序吗
是的话,在外面套一个排序就可以了
select t.* from (select top 5 * from tb order by id desc) t order by id desc

------解决思路----------------------
引用:
你是说最终结果没有排序吗
是的话,在外面套一个排序就可以了
select t.* from (select top 5 * from tb order by id desc) t order by id desc

這樣的sql就顯得多餘了
直接
select top 5 * from tb order by id desc
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

你是说最终结果没有排序吗
是的话,在外面套一个排序就可以了
select t.* from (select top 5 * from tb order by id desc) t order by id desc

這樣的sql就顯得多餘了
直接
select top 5 * from tb order by id desc

这只是举例,实际SQL是非常复杂的,当然数据量不大,对性能要求不高,所以不需要优化SQL的,只希望子查询实现排序

子查詢得到的結果作為臨時表再查找數據,最後結果還是無序的,如果要排序還是要加Order by 
------解决思路----------------------
你应该是用了其它影响默认排序的 关键字
如果是的话,只能再外面套一个ORDER BY 了
------解决思路----------------------
引用:
终于知道这是MSSQL0508的一个BUG,要安装补丁才能修复。。。。。天!

还有这说~~
另外,我说的能影响排序的关键字,是指GROUP BY ROW_NUMBER等

不过,回想你说SQL2000有效,而2008无效,可能真的是BUG了
------解决思路----------------------
之前是有碰到这种情况,网上说是“top 100 percent”会被优化掉,没效果。后来就改成“top 100000000”,因为我们公司的数据量顶多上百万条。
------解决思路----------------------
SELECT * FROM (SELECT TOP 5 * FROM sys.tables ORDER BY object_id DESC) t


SQL2008 R2版本测试没问题
  相关解决方案