剛剛寫的SQL語句在執行的時候報【ORA-01785: ORDER BY item must be the number of a SELECT-list expression】錯誤,於是自己百度了一下相關錯誤,發現是和Oracle排序語句的特殊寫法有關系,這里記錄一下。
先不說錯誤的問題,我們先用常規的寫法寫一句帶排序子句的SQL語句。
SELECT ID, CODE, NAME FROM STUDENT ORDER BY CODE;
這樣寫是能夠正常執行的。
然后說一下排序子句的特殊寫法。特殊的寫法就是在ORDER BY排序子句中,可以用數字(相當於下標 + 1)代替要用來排序的字段。比如說上面的SQL語句,用來排序的字段是CODE,它在前面的SELECT子句的字段中排第二位,那么就可以用數字2來代替它。
SELECT ID, CODE, NAME FROM STUDENT ORDER BY 2;
這樣查詢出來的結果和上面的語句查詢出來的結果是一樣的。
然后我們來做個試驗,把ORDER BY子句中的數字改成4試一下,這時數字4在前面的SELECT子句中是沒有對應的字段的,因為SELECT子句中只有三個字段。
SELECT ID, CODE, NAME FROM STUDENT ORDER BY 4;
不出意料的,報ORA-01785的錯誤了。
到這里我們就可以明白,這個錯誤是因為ORDER BY子句中的數字代表的字段位數超出SELECT子句中的字段個數引起的。意思就是說,當SELECT子句中的字段有5個,那么ORDER BY子句中的數字就不能大於5,范圍區間是[1,5]。
當然,也可以進行多個字段排序和升序降序排序的。
SELECT ID, CODE, NAME FROM STUDENT ORDER BY 2 DESC, 3;
看到這里,當下次遇到ORA-01785錯誤的時候,聰明的你就知道怎么解決啦。
"夕陽無限好,只是近黃昏。"