select e.ename 姓名
      -- ,months_between(sysdate, e.hiredate) 工作时长(月)
  from emp e
 where months_between(sysdate, hiredate) =
       (select max(months_between(sysdate, hiredate))
          from emp e, dept d
         where e.deptno = d.deptno
           and e.deptno = (select d.deptno
                             from emp e, dept d
                            where e.deptno = d.deptno
                              and e.ename = 'KING'))
为什么我不注释掉第二行,程序就报错呢,说是from后面没有where语句,在线等啊

解决方案 »

  1.   

    额.报的错是这个FROM KEYWORD NOT FOUND WHERE EXCEPTED
      

  2.   


    ,months_between(sysdate, e.hiredate) "工作时长(月)"
    --要用双引号把列名引起来,这样就不会出错了,不过你的语句也有问题吧
      

  3.   

    有括号存在呀,有的字符是需引起来的,而且如果有两个人是同一个日期的,你不感觉你的语句会把他们都取出来吗?
    select emp.ename,emp.hiredate,emp.deptno
    ,trunc(months_between(sysdate,emp.hiredate)) "工作时长(月)"
    from emp,(select min(deptno) deptno,max(hiredate) hiredate from emp
    where deptno=(select deptno from emp where upper(ename)='KING'))t
    where emp.deptno=t.deptno and emp.hiredate=t.hiredate;
      

  4.   

    是这样啊,不过如果是在KING这个部门,而且两个人同日期的话,是应该取出来的啊