子查询中不允许用order by子句,那么应该怎么办?

我有一个oracle语句:SELECTt1.SID,t1.CID,ScoreFROMSCt1WHEREscoreIN(SELECTscoreFROMSCWHEREt1.C... 我有一个oracle语句:SELECT t1.SID ,t1.CID ,Score FROM SC t1 WHERE score IN ( SELECT score FROM SC WHERE t1.CID= CID and rownum <=2 ORDER BY score DESC ) ORDER BY t1.CIDORA-00907: missing right parenthesis我在pl/sqldevelop工具执行的时候,报错,内容为:ORA-00907: missing right parenthesis请问,我也没有缺失右括号啊,上文里的括号都是在英文半角模式下输入的,而且,我查阅了一下,说是在子查询中不能用order by子句,那么请问上面的语句应该如何修改呢?? 展开
 我来答
匿名用户
2017-02-20
展开全部
SELECT t1.SID ,t1.CID ,Score
FROM SC t1
WHERE score IN ( SELECT score
FROM SC
WHERE t1.CID= CID
and rownum <=2
)
ORDER BY t1.CID

这样试试?都说明了,子查询中不能排序,而且排序也没意义。
追问
不明白为什么没意义,
如果这样把order by去掉了,如何能得到前2名的成绩??
追答
出于效率,ORACLE会对IN子查询做DISTINCT,而DISTICT本身就要ORDER,且是ASC方式,所以不再支持加ORDER BY子名。
http://www.2cto.com/database/201201/116777.html
参照这个链接,应该可以用,写了三层嵌套,但是 rownum 跟 order by 没有在一条查询里边用。我本地没有orcale 环境,无法测试。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式