Я пытаюсь использовать порядок оракула с помощью инструкции select, но это вызывает исключение:
ORA-01791: not a SELECTed expression.
select distinct usermenu.menuname
from usermenu, userpermission
where userpermission.menuno = usermenu.menuno
and userpermission.userno = 1
order by userpermission.menuno;
Вы пробовали: order by usermenu.menuno
? Кроме того, я считаю, что столбцы order by
также должны отображаться в списке select
.
Вы заказываете по userpermission.menuno
, но это не столбец выбранной проекции.
см. глубоко заявление, то вы оштрафованы.
Когда в списке столбцов оператора DISTINCT
есть SELECT
или агрегатная функция, ORDER BY
столбец, который не является частью списка столбцов SELECT
, не будет работать.
Вот пример, основанный на схеме Скотта.
Это работает нормально, хотя D.LOC
не выбрано:
SQL> select d.dname, e.ename
2 from dept d join emp e on e.deptno = d.deptno
3 order by d.loc;
DNAME ENAME
-------------- ----------
SALES BLAKE
SALES TURNER
SALES ALLEN
SALES MARTIN
SALES WARD
SALES JAMES
RESEARCH SCOTT
RESEARCH JONES
RESEARCH SMITH
RESEARCH ADAMS
RESEARCH FORD
ACCOUNTING KING
ACCOUNTING MILLER
ACCOUNTING CLARK
14 rows selected.
Теперь добавьте DISTINCT
- в общем, вот что у вас есть:
SQL> select distinct d.dname, e.ename
2 from dept d join emp e on e.deptno = d.deptno
3 order by d.loc;
order by d.loc
*
ERROR at line 3:
ORA-01791: not a SELECTed expression
То же самое касается агрегатных функций, таких как COUNT
:
SQL> select d.dname, e.ename, count(*)
2 from dept d join emp e on e.deptno = d.deptno
3 group by d.dname, e.ename
4 order by d.loc;
order by d.loc
*
ERROR at line 4:
ORA-00979: not a GROUP BY expression
SQL>
Так что делать? Заказать чем-то другим. В качестве альтернативы можно использовать текущий запрос как встроенное представление, соединить его с таблицей, содержащей столбец, по которому вы хотите упорядочить результат, и он будет работай:
SQL> select x.dname, x.ename
2 from (select distinct d.dname, e.ename
3 from dept d join emp e on e.deptno = d.deptno
4 ) x
5 join dept d1 on d1.dname = x.dname
6 order by d1.loc;
DNAME ENAME
-------------- ----------
SALES TURNER
SALES JAMES
SALES BLAKE
SALES WARD
SALES MARTIN
SALES ALLEN
RESEARCH SMITH
RESEARCH FORD
RESEARCH ADAMS
RESEARCH SCOTT
RESEARCH JONES
ACCOUNTING MILLER
ACCOUNTING KING
ACCOUNTING CLARK
14 rows selected.
SQL>
Спасибо, дорогой, но как решить этот оператор выбора, который я пытаюсь решить, но это не работает. пожалуйста, помогите мне в этом примере.
Я даже не могу начать объяснять, как много значила для меня твоя помощь.