现有两个表
CREATE TABLE subInfoTab (
subID     NUMBER(9) DEFAULT 0  NOT NULL,
DeptID   NUMBER(9) DEFAULT 0  NOT NULL,
subName     VARCHAR2(17) DEFAULT 0  NOT NULL);
ALTER TABLE subInfoTab ADD (
PRIMARY KEY ( subID ));
CREATE TABLE deptTab (
DeptID   NUMBER(9) DEFAULT 0  NOT NULL,
deptName     VARCHAR2(17) DEFAULT 0  NOT NULL);
ALTER TABLE deptTab ADD (
PRIMARY KEY ( DeptID ));
下面的子查询:
select a.subid,a.subname,
(select deptName from depttab b where b.deptid=a.deptid) deptName
from subInfoTab a;
没有问题,可以执行但是多了一层嵌套之后就不行了,编译不过,写法如下:
select a.subid,a.subname,
(select deptname from (select deptName from depttab b where b.deptid=a.deptid)) deptName
from subInfoTab a;执行时提示ORA-00904: "A"."DEPTID": 无效的标识符
百思不得其解,万望高手指点

解决方案 »

  1.   

    这样确实不可以。
    用外连接吧,类似于:select a.subid,a.subname,b.depttab 
    from subInfoTab a,depttab b where a.deptid=b.deptid;
      

  2.   

    sorry!
    select a.subid,a.subname,b.depttab 
    from subInfoTab a,depttab b where a.deptid=b.deptid(+);
      

  3.   

    谢谢 bzszp(SongZip) 的回复,不过那不是我的本意啊,我的意思是在(select deptName from depttab b where b.deptid=a.deptid)的基础上再做一下处理,比如用SYS_CONNECT_BY_PATH函数将返回的deptName再连起来,可是这时就不能用a.deptid这个写法了,郁闷啊
      

  4.   

    select a.subid,a.subname,
    (select deptname from (select deptName from depttab b,subInfoTab  where b.deptid=subInfoTab .deptid)) deptName
    from subInfoTab a;
      

  5.   

    select deptname from (select deptName from depttab b where b.deptid=a.deptid)没有任何意义给出你的测试数据和想要的结果吧。
      

  6.   

    其实我的意思是在(select deptName from depttab b where b.deptid=a.deptid)的基础上再做一下处理,比如说上述查询可能返回有多条deptName,我想把它们合并成一行,彼此用逗号隔开,例如
    select max(substr(SYS_CONNECT_BY_PATH(deptName, ','),2)) from
      (
      select deptName from depttab b where b.deptid=a.deptid)
      ) start with rn=1 connect by rn=rownum;
    可是这样就会编译不过,执行时提示ORA-00904: "A"."DEPTID": 无效的标识符
      

  7.   

    把max(substr(SYS_CONNECT_BY_PATH(deptName, ','),2)) 放在下面一层来写,就像
    select a.subid,a.subname,
    (select max(substr(SYS_CONNECT_BY_PATH(deptName, ','),2)) from depttab b where b.deptid=a.deptid start with rn=1 connect by rn=rownum ) deptName
    from subInfoTab a;start with rn=1 connect by rn=rownum 这部分好像有些问题(感觉应该在b中定义rn,然后connect by rn=rn-1),不知道你的rn和rownum想要怎么处理,修改一下应该就可以了
      

  8.   

    select deptname from (select deptName from depttab b,subInfoTab a where b.deptid=a.deptid)
      

  9.   

    将select deptname from (select deptName from depttab b where b.deptid=a.deptid)之类的子查询转为一个自定义函数。
      

  10.   

    谢谢 bobfang(匆匆过客) ,我试过了,转为自定义函数的话效率会很低,最好用一个SQL语句解决