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       78396 rows selected.
用户是oracle的试验用户scott这种为什么会有数据返回    子查询的语句是0 rows 而且在emp表中也没有MGR=EMPNO的相应行 怎会出现这6行返回的

解决方案 »

  1.   

    这个查询的意思不是emp表中有没有MGR=EMPNO的相应行,而是emp表中empno列与mgr列有没有值相同的。
    这个查询查的是 emp表中的empno在mgr列中能找到匹配值的数据行
      

  2.   

    exists是在两个表中做loop循环。首先取出一个mgr值,在empno中找对应的值,当找到第一个对应的值后结束loop。再取下一个mgr值开始loop。所以最后显示6行数据。