SQL - 你必须在外部查询中重复 ORDER BY 吗?

SQL - Do you have to repeat ORDER BY in outer query?

我有一个问题:

select   t1.*
from     t1
order by t1.date

此查询包含在另一个查询中:

select * from (select   t1.*
               from     t1
               order by t1.date) t2

你必须在外部查询中重复 ORDER BY 吗?像这样:

select * from (select   t1.*
               from     t1
               order by t1.date) t2 order by t2.date

如果将内部查询移至 CTE,答案会改变吗?

是的,你必须在外部查询中重复 order by,如果你想要输出被排序。

SQLserver 仅在外部查询中遵循 order by,您的内部 order by 毫无意义

外部查询可能会更改通过内部查询提供的结果的顺序。因此,您也需要外部查询的顺序。 但是,不需要考虑您使用 order by ininner 查询提供的示例查询。

您不需要在两个查询中重复 order by。您应该在外部查询中使用 Order By。像下面这样:

Select * From (Select   t1.* From  t1) t2 
Order By t2.date

在 SQL 服务器中,当您尝试使用没有 topoffsetfor xmlorder by 时会出现错误,除非它在最外层查询。

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

您可以使用 select top 100 percent 在语义上解决该错误,但是当在另一个语句中调用该语句时,将不会严格执行 order by