SQL> select * from dept a
  2  where a.deptno in
  3  (
  4  select b.deptno from dept b
  5  order by b.dname
  6  )
  7  ;
order by b.dname
*
ERROR at line 5:
ORA-00907: missing right parenthesis--单独执行是可以的SQL> select b.deptno from dept b
  2  order by b.dname;    DEPTNO
----------
        10
        40
        20
        30SQL>

解决方案 »

  1.   

    确实是这样的,有语法错误from 子句后面的内联视图是可以使用order by子句进行排序的。然而,其它视图或子查询是不能用order by进行排序的如果你要用选择前几条的话,需要在套一层变成from后面的内联视图。比如
    select * from dept a
      2  where a.deptno in
      3  (
    select depton from (
      4  select b.deptno from dept b
      5  order by b.dname
      6  ) [where rownum < 5])
      

  2.   

    谢谢 明白了
    呵呵 我就觉得奇怪
    明明在其他地方看到有子查询里使用order by的 为什么到我这里就不行了
    现在想想 我看到的那个子查询是在FROM后面的 而不是WHERE