sqlserver2005 查询有union all组成的表为什么union中的排序不起作用

select [table],id,title,[time],[type] from
(
select top 100 percent 'mixTable1' as [table], id,title,[time],[type] from mixTable1 where title like '%刘%'
union all
select top 100 percent 'mixTable2' as [table], id ,title,[time],[type] from mixTable2 where title like '%刘%'
order by [time] desc
) ff
从结果看其中order by [time] desc没起作用

因为union all是将来年各个查询的结果集拼接在一起,
你如果在其中的一个查询中order by,没记错的话会语法错误,假设没语法错误的话,
只是对结果集的一部分进行排序,不能达到对整个结果集进行排序的效果,所以是没有意义的
如果你想实现对整个结果集进行排序的话,可以在外面order by :
select 你想要的字段
from (查询1 union all 查询2)
order by 排序字段

看了你的问题补充:
将order by [time] desc 放在ff后边就行啦追问

嗯,加入top 100 percent 后不会再报错,为什么单独运行
select top 100 percent 'mixTable1' as [table], id,title,[time],[type] from mixTable1 where title like '%刘%'
union all
select top 100 percent 'mixTable2' as [table], id ,title,[time],[type] from mixTable2 where title like '%刘%'
order by [time] desc
会排序,但运行上面的sql语句就不会排序了

追答

不知道,我猜测是:sql在union两个结果集的时候是乱序拼接的

温馨提示:答案为网友推荐,仅供参考
相似回答