众所周知,在 PostgreSQL 的子查询中使用 ORDER BY 是没有意义的,DBMS 只会尊重最外层的 ORDER BY。
但是,如果我们在子查询中包含 LIMIT(与 ORDER BY 一起),情况仍然如此吗?
在子查询中使用
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 条记录,即该结果集可能与第一个查询不同。