大家好,我想请教一下大家not exists的问题

lj603069382 2012-08-09 12:45:44
我有一张员工表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这种写法,请问怎么实现呢,真的超级感谢各位了
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2012-08-11
  • 打赏
  • 举报
回复
看这个exists有点的怪异。
一般not exists 是里面的表跟外面的表进行关联查询像
select * from emp a where not exists (select 1 from emp b where a.empno = b.mgr)
槑党--一缕风 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你的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.en……
[/Quote]

楼主的正解,分析也很透彻~~
人生无悔 2012-08-09
  • 打赏
  • 举报
回复
你的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后怎么选都不会有结果的

人生无悔 2012-08-09
  • 打赏
  • 举报
回复

--这样写才可以
select ename from emp where not exists
(select e.ename from emp e where e.empno=emp.empno and e.mgr is null);

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧