在 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 子句从子查询中移出并移至外部查询。
在 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 子句从子查询中移出并移至外部查询。