表T_PUB_UNIT_TYPE结构及部分数据
UNIT_TYPE_ID  | UNIT_TYPE_NAME | UNIT_TYPE_CODE
------------------------- --------------------------- ------------------------
     1                         1000                       成品单位
      2                         1001                       重量单位
     43                         JBNL                       设备能力单位表T_PUB_UNIT结构及部分数据
UNIT_ID | PARENT_ID | UNIT_TYPE_ID | UNIT_NAME | UNIT_CODE
------------------ ----------------- ------------------  --------------  -------------     
   2                      0                  1                  箱
   4                      2                  1                  万支
   6                      4                  1                  条
   21                     6                  1                  盒
现通过两表中的UNIT_TYPE_ID字段将两表联系起来,生成一颗树的结构
成品单位
   箱
      万只
         条
            盒
重量单位
    吨
      公斤

解决方案 »

  1.   

    生成的结果如下图所示
    其中成品单位,频率,速度外面这层数据取自T_PUB_UNIT_TYPE表,;;里面的一层箱,万只,瓦,伏特取自T_PUB_UNIT各位大侠帮帮忙哈,SQL语句不行,搞了好久都没有搞出来啊。
      

  2.   

    重新上传下这两张表的结构图,以便各位大虾看得清晰些!!!
    表T_PUB_UNIT_TYPE结构图
    表T_PUB_UNIT结构图
      

  3.   

    搞不清楚你这棵树有何用,可以先连接+排序,打开某子叶时再加where ...
    select a.UNIT_TYPE_ID,a.UNIT_TYPE_CODE, b.UNIT_NAME 
    from T_PUB_UNIT_TYPE a
    left join T_PUB_UNIT b on a.UNIT_TYPE_ID = b.UNIT_TYPE_ID
    order by a.UNIT_TYPE_ID, b.UNIT_NAME 
      

  4.   


    老兄。你这实现的只是单表T_PUB_UNIT 的显示结果,外面那层表T_PUB_UNIT_TYPE的成品单位,重量单位等字段并没有添加进去。
    我觉得实现他要使用connect by ....start with...和union all...语句相结合使用吧,但还是没有写出来。
      

  5.   

    你是不是要下面这个?
    select a.unit_type_name,b.unit_name from T_PUB_UNIT_TYPE a
    left join T_PUB_UNIT b on b.UNIT_TYPE_ID=a.UNIT_TYPE_ID
     start with b.PARENT_ID=0
     connect by b.PARENT_ID = prior b.UNIT_ID
     order by b.parent_id;
      

  6.   

    小白的方法,分组可以用group by嵌套递归,比较土,具体语句不会写,只是个思路
      

  7.   

    oracle的可以这样写:(假设所有字段都是字符,如果是整型自己对应改一下就OK啦)
    select * from 
    (   
       select '计量单位管理' name,'0' id,'-1' parentid from dual 
       union all select UNIT_TYPE_CODE,UNIT_TYPE_ID,'0' from T_PUB_UNIT_TYPE 
       union all select UNIT_NAME ,UNIT_ID,UNIT_TYPE_ID from T_PUB_UNIT

    start with parentid ='-1' connect by prior id=parentid
    这个可以达到你要求
      

  8.   

    union all 每个对应字段类型一样就OK啦
      

  9.   


    select * from 
    (   
       select '计量单位管理' name,'0' id,'-1' parentid from dual 
       union all select UNIT_TYPE_NAME,UNIT_TYPE_ID,'0' from T_PUB_UNIT_TYPE 
       union all select UNIT_NAME ,UNIT_ID,UNIT_TYPE_ID from T_PUB_UNIT

    start with parentid ='-1' connect by prior id=parentid我刚刚看了原贴的字段名跟后来发的截图表的字段名调转了,把UNIT_TYPE_CODE,改为UNIT_TYPE_NAME就行啦
      

  10.   

    SELECT T1.F_UNIT_TYPE_ID, T1.F_UNIT_TYPE_CODE, T1.F_UNIT_TYPE_NAME, 
    T2.F_UNIT_ID, T2.F_UNIT_CODE, T2.F_UNIT_NAME
    FROM T_PUB_UNIT_TYPE T1
    JOIN
    (
    SELECT F_UNIT_ID, F_PARENT_ID, F_UNIT_TYPE_ID, F_UNIT_CODE, F_UNIT_NAME FROM T_PUB_UNIT
    CONNECT BY PRIOR F_UNIT_ID = F_PARENT_ID
    START WITH F_UNIT_TYPE_ID IN (SELECT F_UNIT_TYPE_ID FROM T_PUB_UNIT_TYPE)
    )T2
    ON T1.UNIT_TYPE_ID = T2.F_UNIT_TYPE_ID
    大体的思路应该是这样吧。。
      

  11.   

    SELECT T1.F_UNIT_TYPE_ID, T1.F_UNIT_TYPE_CODE, T1.F_UNIT_TYPE_NAME, 
    T2.F_UNIT_ID, T2.F_PARENT_ID, T2.F_UNIT_CODE, T2.F_UNIT_NAME, T2.LV
    FROM T_PUB_UNIT_TYPE T1
    JOIN
    (
    SELECT F_UNIT_ID, F_PARENT_ID, F_UNIT_TYPE_ID, F_UNIT_CODE, F_UNIT_NAME, LEVEL AS LV
    FROM T_PUB_UNIT
    CONNECT BY PRIOR F_UNIT_ID = F_PARENT_ID
    START WITH F_PARENT_ID = '0' 
    )T2
    ON T1.F_UNIT_TYPE_ID = T2.F_UNIT_TYPE_ID
      

  12.   

    我来提供一个,看是正解否
    with t_pub_unit_type as
     (select '1' unit_type_id, '成品单位' unit_type_name
        from dual
      union all
      select '2' unit_type_id, '重量单位' unit_type_name from dual),
    t_pub_unit as
     (select '2' unit_id, '0' parent_id, '1' unit_type_id, '箱' unit_name
        from dual
      union all
      select '4' unit_id, '2' parent_id, '1' unit_type_id, '万支' unit_name
        from dual
      union all
      select '6' unit_id, '4' parent_id, '1' unit_type_id, '条' unit_name
        from dual
      union all
      select '81' unit_id, '0' parent_id, '2' unit_type_id, '吨' unit_name
        from dual
      union all
      select '61' unit_id, '81' parent_id, '2' unit_type_id, '公斤' unit_name
        from dual)
    select lpad(' ', (level - 1) * 4, ' ') || name name, pid, id
      from (select 'P' || unit_type_id id, '-1' pid, unit_type_name name
              from t_pub_unit_type t
            union all
            select unit_id,
                   decode(parent_id, '0', 'P' || unit_type_id, parent_id),
                   unit_name
              from t_pub_unit u)
     start with pid = '-1'
    connect by pid = prior id;