在 PostgreSQL 子查询中使用 ORDER BY 和 LIMIT 是否定义了行为?

问题描述 投票:0回答:1

众所周知,在 PostgreSQL 的子查询中使用 ORDER BY 是没有意义的,DBMS 只会尊重最外层的 ORDER BY。

但是,如果我们在子查询中包含 LIMIT(与 ORDER BY 一起),情况仍然如此吗?

postgresql
1个回答
2
投票

在子查询中使用

LIMIT
将影响该子查询生成的中间结果集。 考虑以下两个查询:

SELECT *
FROM
(
    SELECT *
    FROM yourTable
    ORDER BY col1
) t
ORDER BY col2;

在此查询中,内部

ORDER BY
将(或可能不会)执行,但由于没有
LIMIT
,因此中间结果的排序与最终结果的排序无关。 最终结果的顺序仅取决于外部
ORDER BY
子句。

但是,在这个查询中:

SELECT *
FROM
(
    SELECT *
    FROM yourTable
    ORDER BY col1
    LIMIT 10        -- only keep first 10 records
) t
ORDER BY col2;

别名为

t
的子查询只会返回 10 条记录。 同样,最终的排序仅取决于外部
ORDER BY
子句,但结果集中只有 10 条记录,即该结果集可能与第一个查询不同。

© www.soinside.com 2019 - 2024. All rights reserved.