select ename, empno, mgr from
 (select * from emp
 where ename !='KING') ss
 where empno not in (select mgr from ss)第 4 行出现错误:
ORA-00942: 表或视图不存在但是我改成 select ename, empno, mgr from
 (select * from emp
 where ename !='KING') ss
 where empno not in (select mgr from (select * from emp
 where ename !='KING'))就OK;ENAME           EMPNO        MGR
---------- ---------- ----------
SMITH            7369       7902
ALLEN            7499       7698
WARD             7521       7698
MARTIN           7654       7698
TURNER           7844       7698
ADAMS            7876       7788
JAMES            7900       7698
MILLER           7934       7782本人思路:为什么我 在from 里给 表 (select * from emp
 where ename !='KING') 起别名 ss
然后在 放到 where empno not in (select mgr from ss) 里面 就会出错呢??
哪位大哥帮下忙 谢谢!!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yangyongjie81】截止到2008-08-01 09:35:20的历史汇总数据(不包括此帖):
    发帖的总数量:29                       发帖的总分数:1170                     每贴平均分数:40                       
    回帖的总数量:12                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:28                       结贴的总分数:1120                     
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:50                       
    结贴的百分比:96.55 %               结分的百分比:95.73 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    值得尊敬

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=yangyongjie81
      

  2.   

    where empno not in (select mgr from ss) 
    这句中empno是约束条件,你后面的视图得到的是mgr列
      

  3.   

    别名也有作用域问题啊!
    select ename, empno, mgr from 
    where empno not in (select mgr  from emp 
    where ename !='KING')
    不就好了
      

  4.   

    看错你的表结构了,不好意思,3楼正解,你如果要使用别名的话,不妨把这个视图单独用一个语句创建出来.
    create view ss as 
    select * from emp where ename !='KING';select ename, empno, mgr from ss 
    where empno not in (select mgr from ss) 
      

  5.   

    select ename, empno, mgr from 
    (select * from emp 
    where ename !='KING') ss 
    where ss.ename='SMITH'
    应该能执行。where empno not in (select mgr from ss)
    换成in的化,会出现作用域的问题。
      

  6.   

    with ss as (select * from emp where ename !='KING')
    select ename, empno, mgr from ss 
    where empno not in (select mgr from ss)
      

  7.   

    SQL修改下select ename, empno, mgr from 
    (select * from emp 
    where ename !='KING') ss ,
    (select * from emp 
    where ename !='KING') ss2 
    where ss.empno <> ss2.mgr
    and ss.empno is not null
    and ss2.mgr is not null注意不能为空