关于子查询中不能使用order by 的理解

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/f04062115/article/details/84002297
select * from (select * from emp e where e.sal < 1000 order by e.empno) t order by t.sal desc;

这条SQL的子查询里面 包含了子查询 就可以执行
而下面这条SQL
[quote]select * from emp where dept in
(select dept from valid_deps
where dept_head='sally'
order by dept);[/quote]
在执行的时候则会报[img]“ORA-00907:缺失右括号”[/img]

具体原因:
在8i以前,子查询中不能包含Order By子句。

从8i开始,子查询可以有Order By,但必须是有top-n的这种子查询时才能用。

所谓的top-N查询就是:
TOP-N一般是指最大的n条记录或着是最小的n条记录。
如:
select rownum , t.col1, t.col2, ... from
( select col1, col2, ... from tab
order by col1 ) t
where rownum <= n;

参考文章:[url]http://blog.csdn.net/lee576/article/details/2685647[/url]
展开阅读全文

求救:在MySQL中不能使用IN子查询

02-02

环境:MySQL 4.0.17 WinXP Prornrn问题:现在有一个业务系统需要从SQLServer上向MySQL进行移植,在调试过程中发现如下的SQL语句不能正常运行(在SQLServer上可以正常运行):rnSELECT * FROM tab_sys_function where function_code in rn(SELECT DISTINCT SUBSTRING(a.function_code, 1, 2) rnfrom tab_sys_function a, tab_sys_user_perm b rnwhere a.function_id = b.function_id and b.user_id =1 rnunion SELECT DISTINCT SUBSTRING(c.function_code, 1, 2) rnfrom tab_sys_function c, tab_sys_role_perm d,tab_sys_role_user e rnwhere c.function_id = d.function_id and e.user_id =1 rnAND d.role_id=e.role_id) rn这条语句看上去比较复杂,其实说白了就是根据用户所具有的角色和权限找出他所能使用的全部二级功能,然后再以此为据找出用户可以看见的所有一级功能。这里功能的代号长度可以决定它所属的级数,2位的是一级,4位的是二级。rnrn在MySQL COnsole Center的SQL窗口中执行该语句,会出现以下错误:rnERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT DISTINCT SUBSTRING(a.function_code, 1, 2) rnfrom tab_sys_rnrn经过进一步测试,发现在我这个MySQL里面只能在IN后面跟值的列表,例如:IN('01','02'),而不能跟任何子查询,否则就会报错。这让我非常困惑,因为IN后面跟子查询是非常常见的做法,为什么这里不能用呢?而且因为是移植系统,所以不可能对原系统代码进行大量修改,所以还请各位高手伸出你们的援助之手,就小弟于水火之中吧。只要能够解决这个问题,100分就是你的了。 论坛

没有更多推荐了,返回首页