我有一个表是存的部门结构,字段为“部门id”,“部门名称”,“上级部门ID”,部门的层级是无限延伸的,每级部门ID前面几位是上级部门的ID。例如部门“01”下的部门为“0101”,“0102”.....
我现在要根据一个部门列表来检索数据,需要将这个部门列表中的部门的上级部门与下级部门都检索出来,这个语句怎么写好?例如我的表里面有:
部门id   上级部门id
01       0
02       0
03       0
0101     01
0102     01
0103     01
010101   0101 
010102   0101
010201   0102
010202   0102
0201     02
0202     02
020101   0201
020102   0201
020201   0202我现在有一个部门列表为("0102","0202"),那么我要得到的数据为:部门id   上级部门id
01       0
02       0
0102     01
010201   0102
010202   0102
0202     02
020201   0202有一种写法就是:where 部门id like '0102%' or '0102' like 部门id||'%'  or 部门id like '0202%' or '0202' like 部门id||'%'
这样写太麻烦了,而且我的部门列表里面有可能有很多个部门ID,有没有简单点的写法?

解决方案 »

  1.   

    select *
    from  表
    start with 上级部门id='0'
    connect by piror 部门id= 上级部门id
      

  2.   


    那我的where语句怎么写呢?
      

  3.   

    select *
      from 表
     start with 部门id in("0102","0202")
    connect by prior 上级部门id = 部门id
    union
    select *
      from 表
     start with 部门id in("0102","0202")
    connect by prior 部门id= 上级部门id
      

  4.   

    树型结构。。用connect by 实现
      

  5.   

    啊,長知識。。原來SQL里面有數据結構的知識。。