表 T
create table T
(
  ID  NUMBER,
  CID number,
  primary key(ID)
);
表TC
create table TC
(
  CID   number,
  CNAME VARCHAR2(10),
  primary key(CID)
)语句1
select  
     (select tc.cid
  from tc where tc.cid=t.cid) AS C
from t在任何版本下都能执行但语句2
select  
    (select cid from (select tc.cid
  from tc where tc.cid=t.cid)) AS C
from t在oracle9i下不能执行 提示t.cid不识别
ORacle 10.0.2版本下能执行
更奇怪的是 在oracle10.0.3下也不能执行 相同的提示大家不要考虑这句话的实际意义,因为我是从一个复杂的数据逻辑中抽取出来的简单逻辑
谁能解释一下
我怀疑可能跟数据库服务器的设置有关

解决方案 »

  1.   

    尝试了
    select   
        (select cid from tc where tc.cid=t.cid
                --(select tc.cid from tc where tc.cid=t.cid)
        ) AS C 
    from t 
    是可以的。select   
        (select cid from --tc where tc.cid=t.cid
                (select tc.cid from tc where tc.cid=t.cid)
        ) AS C 
    from t 
    不可以,报t.cid无效,换句话说,2层嵌套内引用最外层表时,oracle9i不认。建议:改成引用一层嵌套的表。SQL越简单,越不会出错。改成若干个小SQL更好。或者换成function。
      

  2.   

    还种方法是可以实现,我想知道为什么会出现这种情况,9i下不行,10.0.2可以 10.0.3却又不行了
    谁能解释一下为什么呢?oracle里是怎么实现这个查询的? 我总觉得 应该和oracle的设置有关 否则不会低版本和高版本都不行 中间一个版本却可以
      

  3.   

    呵呵, 我已经给oracle发邮件,不过人家不一定能回复我,csdn上还是有很多能人的