select d.*,ed.count(empno)
from dept d,
(select deptno,count(empno) from emp
group by deptno having count(empno)>=1) ed
where d.deptno=ed.deptno;各位大侠能帮我看看这段代码有什么问题吗?我是初学者,怎么都看不出有什么问题,但是就是报错

解决方案 »

  1.   

    因为你没给count(empno)取常规的别名,直接使用了默认的形式,但是这个名字含有(,在oracle里是有特殊含义的,要想在名称里使用必须使用"来引用.
    SQL> select d.*,ed."COUNT(EMPNO)"
      2  from dept d,
      3  (select deptno,count(empno) from emp
      4  group by deptno having count(empno)>=1) ed
      5  where d.deptno=ed.deptno;
     
    DEPTNO DNAME          LOC           COUNT(EMPNO)
    ------ -------------- ------------- ------------
        30 SALES          CHICAGO                  6
        20 RESEARCH       DALLAS                   5
        10 ACCOUNTING     NEW YORK                 3
     
    SQL> 
      

  2.   

    注意oracle里默认情况下,名称中的字母会自动转换为大写.
    如果要使用小写也必须使用"来指定.
      

  3.   


    SQL> select d.*,ed.count(empno)
      2  from dept d,
      3  (select deptno,count(empno) from emp
      4  group by deptno having count(empno)>=1) ed
      5  where d.deptno=ed.deptno;ORA-00904: "ED"."COUNT": invalid identifierSQL> select d.*,ed.num
      2  from dept d,
      3  (select deptno,count(empno) num from emp
      4  group by deptno having count(empno)>=1) ed
      5  where d.deptno=ed.deptno;DEPTNO DNAME          LOC                  NUM
    ------ -------------- ------------- ----------
        10 ACCOUNTING     NEW YORK               3
        20 RESEARCH       DALLAS                 5
        30 SALES          CHICAGO                6--给ed表中的列 count(empno) 起一个别名
      

  4.   

    --还是取别名吧
    select d.*,ed.cnt
    from dept d,
    (select deptno,count(empno) cnt from emp
    group by deptno having count(empno)>=1) ed
    where d.deptno=ed.deptno;
      

  5.   

    外层里面 ed并没有empno 这一列,你应该在内层的时候命名一个别名。  然后外层用别名引用