2017-03-06 76 views
1

在LibreOffice的基地我想,作为减少例如,查询以下:嵌套ORDER BY在LibreOffice的基础SQL语句

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

的错误说法是:

不能在ORDER BY陈述条款[SELECT * FROM(SELECT “ROWname” FROM “TABULARname” ORDER BY “ROWname”)]

没有外部查询{SELECT * FROM (…);}它的工作原理。那么在该陈述中,ORDER BY条款中不能包含的原因是什么?

回答

0

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

MariaDB的和MySQL没有这个限制。

以订单条款出来的子查询的,如果你可以把它移到你的外部查询。

0

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

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

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

谢谢,帮助understandig的错误很多。对于外部查询,我希望在顶部X(例如5)有序结果中做一个SUM:'SELECT SUM(“ROWname”)AS“Alias”FROM(SELECT * FROM(SELECT“ROWname”FROM TABULARname ORDER BY “ROWname”DESC)LIMIT 5);'如果我只能在最外面的查询中添加'ORDER BY',它会排序5个(随机)结果,但我想先排序,然后取5个最高结果。我能管理吗? – DoJo

+0

你可以这样做,但是“极限”应该在同一个子库中作为'order by'命令。更新了答案,希望有所帮助! – Andomar

+0

可悲的是我得到了同样的错误信息:没有'ORDER BY'允许那里。正如你所说这是一个内部的子查询,仍然试图订购... – DoJo

0

试试这个

SELECT * 
FROM TABULARname 
ORDER BY ROWname