表 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.2.0版本下能执行 
更奇怪的是 在oracle10.3.0下也不能执行 相同的提示 大家不要考虑这句话的实际意义,因为我是从一个复杂的数据逻辑中抽取出来的简单逻辑 
谁能解释一下 
我怀疑可能跟数据库服务器的设置有关 
http://topic.csdn.net/u/20080326/17/ba329752-7be2-44db-9b79-b79f023924a4.html
此处也是我发的帖子 一共200分
另外 此语句我在sql server2005下也测试过,也能执行过去

解决方案 »

  1.   

    你那个帖子有人说了
    在里面找不到最外层的表了
    我写sql不会这样写的
      

  2.   

    select    
         (select tc.cid  
      from tc where tc.cid=t.cid) AS C  
    from t 
    寫成這樣的話就在什么環境下就可以了啊!
    select t.cid from t,tc where t.cid=tc.cid
      

  3.   

    先说一下这个问题是怎么来的,是有人问我一个非常长的sql语句,说这句话有问题,就是在两个不同的版本的oracle中 一个能执行过去,一个不能执行过去,我也告诉他可以换种方式实现,但他就是想知道为什么会出现这个情况,我这是为了让大家能很快看明白这个sql 所以自己写了这么一个简单的sql重现了他那个复杂的sql的问题所在。
    我这个简单的sql在他不同版本下执行 和他那个复杂的sql结果是一样的提示。现在我不是想问这句话怎么改,我是想知道就是这么一句话,在oracle下到底是怎么被解析 怎么被执行的。为什么会出现不同版本 有的能执行 有的不能执行。如果说改掉这个写法,我觉得 我也不会费这么大力到这来请教高人了。赫赫
    请大家不要在关注这个写法优美不优美。多多关注一下oracle的编译原理,我觉得问我这个问题的人就很有求知欲。
    谢谢大家
      

  4.   

    问题是LZ在一种版本可以,另一版本不可以,这按LZ所说应该是设置问题.......
      

  5.   

        这也不算什么编译原理,最多就是oracle的sql引擎的解析机制,出现这个是属于版本上的差异。
    很久以前就遇到过,没有什么可以解释的。
         
        
      

  6.   

    LZ的SQL1,在ORACLE805下也是不行的
      

  7.   

    这问题我也碰到过  在9i中的。
    在 from 前面的查询中是能识别的! 
    如果是在from 前面中查询的子查询中就不能识别了!
      

  8.   

    期待答案。
    能否找到oracle10.2.0和oracle10.3.0之间更新的内容,看一下有没有思路
      

  9.   

    不太合理的SQL,除非想绑定到特定版本,否则细论的意义就不大
      

  10.   

    select    
        (select cid from (select tc.cid  
      from tc where tc.cid=t.cid)) AS C  
    from t  非要写那么复杂吗?SELECT TC.CID FROM T,TC WHERE TC.CID=T.CID