我在与 Lukas Eder 的 Twitter 对话中偶然发现了这个问题。
虽然正确的行为是在最外层查询中应用 ORDER BY 子句,因为在这里,我们没有在最外层查询中使用 DISTINCT、GROUP BY、JOIN 或任何其他 WHERE 子句,为什么 RDBMS 不只是通过传入数据,因为它是由内部查询排序的?
SELECT *
FROM (
SELECT * FROM table ORDER BY time DESC
) AS t
至少,在 PostgreSQL 上运行此示例时,您会为内部查询和此派生表示例获得相同的执行计划,以及相同的结果集。
因此,我假设 Planner 将简单地丢弃最外层的查询,因为它是多余的,或者只是传递来自内部表的结果。
有没有人认为情况可能并非如此?