2017-03-06 65 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