为什么这行得通? CTE 中两个不同的 order by with union
Why does this work? Two different order bys with union in CTE
在使用 union
连接表时,您不能使用两个不同的 order by
子句。 (参见此 Whosebug)那么为什么当我使用 CTE 时它会起作用?
;with x as (
select top 1 * from myTable order by col1
union select top 1 * from myTable order by col2
)
select *
from x
CTE 中的查询无法独立运行。
基于Stu的评论:
Order by
对整个查询进行排序。在 CTE 中,您无法对内部查询进行排序,但可以生成 top
。如果您将 order by
与 top
一起使用,它将为 top
提供服务,但不会对结果进行排序。例如,我将查询修改为 return top 5
并且可以看到结果是正确的数据但未排序。
在使用 union
连接表时,您不能使用两个不同的 order by
子句。 (参见此 Whosebug)那么为什么当我使用 CTE 时它会起作用?
;with x as (
select top 1 * from myTable order by col1
union select top 1 * from myTable order by col2
)
select *
from x
CTE 中的查询无法独立运行。
基于Stu的评论:
Order by
对整个查询进行排序。在 CTE 中,您无法对内部查询进行排序,但可以生成 top
。如果您将 order by
与 top
一起使用,它将为 top
提供服务,但不会对结果进行排序。例如,我将查询修改为 return top 5
并且可以看到结果是正确的数据但未排序。