1. 程式人生 > >oracle select distinct order by 同時使用的問題

oracle select distinct order by 同時使用的問題

Oracle 11g資料庫,執行下面語句出現錯誤“ORA-01791: 不是 SELECTed 表示式”:

select distinct name from Share_URL_Seeds order by id 

原來:SELECT語句中含有DISTINCT關鍵字或者有運算子時,排序用欄位必須與SELECT語句中的欄位相對應。

原因:

在ORDER BY中指定多個列,結果將先按照子句中的第一列排序,然後第二個,依此類推。

在SELECT中未出現的列名也可用於ORDER BY 子句中,只要TABLE中有就行。

但如果SELECT子句中出現了DISTINCT關鍵字,則只能用出現過的列名,

而且如果SELECT子句中使用了任何運算子,在ORDER BY 子句中必須保持和SELECT子句中表達式完全一致,否則出現錯誤:“ORA-01791: 不是 SELECTed 表示式”。

如果想按照id排序,而又使name不重複,可用以下sql語句:

SELECT distinct name, min(id) as b FROM Share_URL_Seeds where Type=1 group by name order by b;