我正在尝试在嵌套的select语句中使用order by子句,但它给出了错误ora-00907缺少paranthesis
Select a.column_name,
(Select upper(cmnt_type) AS CMNT_TYPE
from t_tbm_appl_comment_2015
where appl_mnm_id=a.appl_mnm_id
AND rownum = 1
order by cmnt_type desc)
from MD_OTHER_OBJECTS a
答案 0 :(得分:1)
正如Lalit所提到的,你的问题是你试图选择一行然后订购它,这不能得到你想要的东西。
您必须先重写子查询才能进行排序,然后在外部查询中只过滤一行,如下所示:
select cmnt_type
from (select upper(cmnt_type) AS CMNT_TYPE
from t_tbm_appl_comment_2015 tac
where tac.appl_mnm_id = a.appl_mnm_id
order by cmnt_type desc)
where rownum = 1
但是,如果您在查询的选择列表中使用它,则最终会出现ORA-00904: "A"."APPL_MNM_ID": invalid identifier
的错误,因为相关查询只能引用外部查询。下一级。
既然看起来你想要获得最大的上限(cmnt_type),为什么不使用MAX()?
E.g:
select a.column_name,
(select max(upper(cmnt_type))
from t_tbm_appl_comment_2015 tac
where tac.appl_mnm_id = a.appl_mnm_id) cmnt_type
from md_other_objects a;
答案 1 :(得分:0)
我不知道你想通过使用“RoWNUM =1 with Order by desc
”子句实现什么,但是从这个SQL中删除ORA-00907的解决方案是删除Order by,因为你不能删除ROWNUM
因为否则它会给你ORA-01427错误。在使用“Order by
”时添加Rownum = 1
子句也没有意义。
所以你的SQL应该是这样的:
Select a.column_name,
(Select upper(cmnt_type) AS CMNT_TYPE
from t_tbm_appl_comment_2015
where appl_mnm_id=a.appl_mnm_id
AND rownum = 1)
from MD_OTHER_OBJECTS a;