子查询中不允许用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子句,那么请问上面的语句应该如何修改呢??
展开
1个回答
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
这样试试?都说明了,子查询中不能排序,而且排序也没意义。
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 环境,无法测试。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询