请高手看下这个语句为什么报缺少右括号的错误?

select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp t group by t.deptno order by t.deptno);

select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal =(select max(t.sal) from emp t group by t.deptno order by t.deptno);

你这句sql里, 后面的select子句会select出多个max(t.sal)记录的,虽然不知道为啥是括号错误,但是 t2.sal =(select xxxx)肯定是有问题的。

应该用in,另外子句也不需要order by,要排序也应该是对最后的结果排序 放在外面吧
[code="java"]select t2.empno,t2.ename,t2.sal from emp t2 where t2.sal in (select max(t.sal) from emp t group by t.deptno) order by t2.sal;[/code]

楼主的语句应改成如下

select t2.empno,t2.ename,t2.sal
from emp t2
where t2.sal =(select max(t.sal) from emp);

因为子查询当中的分组和排序好像没有作用。

这个语句明显有语法上的错误嘛,看你写,大致了解下,你想要的结果是,每个部门业绩最好的员工吗?

[code="java"]
SELECT t2.empno, t2.ename, t2.sal
FROM emp t2,
(SELECT MAX(t.sal), t.deptno
FROM emp t
GROUP BY t.deptno
ORDER BY t.deptno) t1
WHERE t2.deptno = t1.deptno
AND t2.sal = t1.sal;
[/code]

[quote]楼主的语句应改成如下

select t2.empno,t2.ename,t2.sal
from emp t2
where t2.sal =(select max(t.sal) from emp);

因为子查询当中的分组和排序好像没有作用。[/quote]

这样写是对的,因为你要找最大的没必要分组,你那种写法逻辑上有问题,你按照deptno分组了,又要找最大的,那就表示每一个部门的最大工资,他返回的结果就不是一个了,分组分了几个就有几个返回值.