找出哪些人是经理人的语句很简单:
select ename from emp where empno in (select mgr from emp);可是我想用类似的句子找出哪些人不是经理人,我是这样写的:
select ename from emp where empno not in (select mgr from emp);
输出是没有命中实在不知道是什么原因。。难道是因为king那个人的mgr为null值造成的??求解!

解决方案 »

  1.   

    --正确,正是null影响,你无法查询到值
    --因为empno not in相当于 empno<>mgr1 and empno<>mgr2...empno<>null,肯定为false--排除null后就可以了
    SELECT ename
      FROM emp
     WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL);--改写成not exists
    SELECT ename
      FROM emp a
     WHERE NOT EXISTS (SELECT 1 FROM emp b WHERE b.mgr = a.empno);