日期:2014-05-17  浏览次数:20674 次

求问一个关于exists的问题
SQL> select ename,empno,mgr from emp o where exists(select 3 from emp where mgr=o.empno);

ENAME EMPNO MGR
---------- ---------- ----------
FORD 7902 7566
BLAKE 7698 7839
KING 7839
JONES 7566 7839
SCOTT 7788 7566
CLARK 7782 7839

6 rows selected.
用户是oracle的试验用户scott

这种为什么会有数据返回 子查询的语句是0 rows 而且在emp表中也没有MGR=EMPNO的相应行 怎会出现这6行返回的


------解决方案--------------------
这个查询的意思不是emp表中有没有MGR=EMPNO的相应行,而是emp表中empno列与mgr列有没有值相同的。
这个查询查的是 emp表中的empno在mgr列中能找到匹配值的数据行
------解决方案--------------------
exists是在两个表中做loop循环。首先取出一个mgr值,在empno中找对应的值,当找到第一个对应的值后结束loop。再取下一个mgr值开始loop。所以最后显示6行数据。