String,int,int
areaname,id,上级id
总部,0,-1
华中,1,0
华东,2,0
华北,3,0
华南,4,0
华西,5,0
上海,21,2
北京,31,3
武汉,11,1
广州,41,4
杭州,22,2
西湖区,221,22
上面是数据库里的表,我想通过select构建列外个视图如下
总部,0,-1
华中,1,0  总部
华东,2,0  总部
华北,3,0  总部
华南,4,0  总部
华西,5,0  总部
上海,21,2  华东
北京,31,3  华北
武汉,11,1  华中
广州,41,4
杭州,22,2
西湖区,221,22就是读出他的上级id对应的名称

解决方案 »

  1.   

    select a.id,a.name,b.name 上级name from tablea a,
    tablea b where a.上级id=b.id;
      

  2.   

    LZ,1楼的理解是正确的,你如果要构建视图,如下: CREATE OR REPLACE VIEW MY_TEST AS
     select t2.areaname,t2.id,t2.pid,t1.areaname
      from tablename t1,
           tablename t2
     where t2.pid = t1.id(+);======================result=========================AREANAME         ID        PID AREANAME
    -------- ---------- ---------- --------
    总部              0         -1 
    华中              1          0 总部
    华东              2          0 总部
    华北              3          0 总部
    华南              4          0 总部
    华西              5          0 总部
    武汉             11          1 华中
    上海             21          2 华东
    杭州             22          2 华东
    北京             31          3 华北
    广州             41          4 华南
    西湖区          221         22 杭州12 rows selected
      

  3.   

    感谢楼上两位的答案,我已经做出来了,但我不明白mantisXF(枫の叶)的where t2.pid = t1.id(+);为什么有(+)这个呢?
      

  4.   

    t2.pid = t1.id(+)就上右连接的意思,就是说,假如条件不相等,那么t1表将生成一个"万能"行和t2进行连接,这个"万能"行是空值!