1

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

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

错误声明是:

不能在语句 [SELECT*FROM(SELECT"ROWname" FROM "TABULARname" ORDER BY "ROWname")] 中的 ORDER BY 子句中

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

4

3 回答 3

0

子查询返回一个无序集合。因此order by,不允许指定子查询。只有最外层的查询可以有order by.

如果您limit N在与order by. 子查询仍将返回无序集,但order by可用于确定前 N 行。例如:

SELECT  SUM(col1) as SumOfTop5Col1
FROM    (
        SELECT  col1
        FROM    YourTable
        ORDER BY
                col1 desc
        LIMIT   5
        ) SubQuery
于 2017-03-06T15:27:13.177 回答
0

试试这个

SELECT *
FROM TABULARname
ORDER BY ROWname
于 2017-03-06T15:29:40.820 回答
0

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

MariaDB 和 MySQL 没有这个限制。

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

于 2017-03-08T05:55:10.053 回答