在 LibreOffice Base 的 SQL 语句中嵌套 ORDER BY

nested ORDER BY in SQL statement in LibreOffice Base

在 LibreOffice Base 中,作为简化示例,我想查询以下内容:

SELECT *
FROM
(
    SELECT "ROWname"
    FROM "TABULARname"
    ORDER BY "ROWname"
);

错误语句是:

Cannot be in ORDER BY clause in statement [SELECT*FROM(SELECT"ROWname" FROM "TABULARname" ORDER BY "ROWname")]

没有外部查询 {SELECT * FROM (…);} 它就可以工作。那么它不能出现在该语句的 ORDER BY 子句中的原因是什么?

一个子查询 return 是一个 无序集 。因此不允许为子查询指定 order by。只有最外层的查询可以有一个 order by.

一个例外是,如果您在与 order by 相同的子查询中指定 limit N。子查询仍然是 return 一个无序集合,但是 order by 可以用来确定前 N 行。例如:

SELECT  SUM(col1) as SumOfTop5Col1
FROM    (
        SELECT  col1
        FROM    YourTable
        ORDER BY
                col1 desc
        LIMIT   5
        ) SubQuery

试试这个

SELECT *
FROM TABULARname
ORDER BY ROWname

这是 HSQLDB 1.8(LibreOffice 中默认的嵌入式数据库)的限制。它使子查询,即外部 () 内的内容作为视图而不是查询,并且不允许在其中进行排序。 :-(

MariaDB 和 MySQL 没有这个限制。

如果可以,将 order 子句从子查询中移出并移至外部查询。