一张自身关联的表catalog,结构如下
 id     title    parentid
主键     标题       父id
   
  1     硬件        0
  2     外设        1
  3     打印机      2
  4     软件        0
  5     惠普打印机  3
  6     存储器      1
  7     系统软件    4
  8     外存储器    6
  9     内存储器    6
  10    硬盘        8
 .
  
这里parentid关联id,id=0的表示最顶层的根。嵌套的层次允许有无穷多(只列举出了3层)我现在要把所有的数据列出来,生成一个有如下结构的下拉框:
硬件
  |-外设
     |-打印机
        |-惠普打印机
            .....
    |-存储器     
        |-外存储器
           |-硬盘 
        |-内存储器
|-软件
  |-系统软件求这样的sql。

解决方案 »

  1.   

    SQL> WITH A AS (SELECT 1 ID,'硬件' TITLE,0 PARENTID FROM DUAL
      2             UNION ALL
      3             SELECT 2 ID,'外設' TITLE,1 PARENTID FROM DUAL
      4             UNION ALL
      5             SELECT 3 ID,'打印機' TITLE,2 PARENTID FROM DUAL
      6             UNION ALL
      7             SELECT 4 ID,'軟件' TITLE,0 PARENTID FROM DUAL
      8             UNION ALL
      9             SELECT 5 ID,'惠普打印機' TITLE,3 PARENTID FROM DUAL
     10             UNION ALL
     11             SELECT 6 ID,'存儲器' TITLE,1 PARENTID FROM DUAL
     12             UNION ALL
     13             SELECT 7 ID,'系統軟件' TITLE,4 PARENTID FROM DUAL
     14             UNION ALL
     15             SELECT 8 ID,'外存儲器' TITLE,6 PARENTID FROM DUAL
     16             UNION ALL
     17             SELECT 9 ID,'內存儲器' TITLE,6 PARENTID FROM DUAL
     18             UNION ALL
     19             SELECT 10 ID,'硬盤' TITLE,8 PARENTID FROM DUAL
     20             )
     21  select SYS_CONNECT_BY_PATH(TITLE,'  ') from A
     22  START WITH PARENTID=0
     23  CONNECT BY PARENTID=PRIOR ID
     24  /
     
    SYS_CONNECT_BY_PATH(TITLE,'')
    --------------------------------------------------------------------------------
      硬件
      硬件  外設
      硬件  外設  打印機
      硬件  外設  打印機  惠普打印機
      硬件  存儲器
      硬件  存儲器  外存儲器
      硬件  存儲器  外存儲器  硬盤
      硬件  存儲器  內存儲器
      軟件
      軟件  系統軟件
     
      

  2.   

     select lpad(' ',parentid)||title from t
     start with parentid=0
     connect by prior id=parentidLPAD('',PARENTID)||TITLE
    --------------------------硬件
     外设
      打印机
       惠普打印机
     存储器
          外存储器
            硬盘
          内存储器
    软件
        系统软件已选择10行。
      

  3.   

    谢谢上面两位老大的sql,忘了说了,我的是在mysql下的表,又该怎么迁移过来?麻烦再帮忙一下!如果奏效,我会给分的
      

  4.   

    1,2楼的老大是够牛的,尤其2楼的,我4了一下,果然可以,给分只可惜没有mysql下的,大家帮忙啊