日期:2014-05-16  浏览次数:20740 次

大家好,我想请教一下大家not exists的问题
我有一张员工表emp,有散列,第一列是员工号empno,第二列是姓名ename,第三列是该员工的领导号mgr
现在要查询出不是领导的员工,我用的not exists外加内连接,不知道为什么,查询完以后是没有数据的,麻烦大家帮我看看
select ename from emp where not exists (select e.ename from emp e join emp m on e.empno=m.mgr);
我知道select e.ename from emp_liujin e where not exists (select ename from emp_liujin where e.empno=mgr);
select ename from emp where ename not in (select e.ename from emp e join emp m on e.empno=m.mgr);这两种写法,现在我想用not exists外加join in这种写法,请问怎么实现呢,真的超级感谢各位了

------解决方案--------------------
你的not exists必须有栏位取自于emp表,也就是你前面的查询表必须在not exists中出现才会是你想要的结果

not exists指的是不存在的:select e.ename from emp e join emp m on e.empno=m.mgr这个是存在的

因此你写select ename from emp where not exists (select e.ename from emp e join emp m on e.empno=m.mgr);

就相当于select ename from emp where not exists(select 1 from dual where 1=1);
因(select 1 from dual where 1=1)永远成立,因此你前面加not exists后怎么选都不会有结果的