表结构如下:
id, name, pid(父id)
1,   a,      0
2,   b,      0
3,   a2_0,   1
4,   a2_1,   1
5,   a2_0_0, 3
.
.
.如此树状超过两层.最多4层.请问如何用一条sql语句,找出id=1本身及其所有子节点.sql语句必须能在mysql是用.
网上有很多oracle和sqlserver中的做法,但mysql中不行,我的mysql版本不支持存储过程,如果升级很多数据又不兼容.
看到很多大侠说不超过4层的可以用left join做到,请问该怎么写?谢谢!

解决方案 »

  1.   

    select distinct d.id
    from 表结构如下 a inner join 表结构如下 b on a.id=b.pid or a.id=b.id
    inner join 表结构如下 c on b.id=c.pid or b.id=c.id
    inner join 表结构如下 c on b.id=d.pid or c.id=d.id
    where a.id=1
      

  2.   

    另外也可以使用如下方法。MySQL中进行树状所有子节点的查询
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
      

  3.   


    太感谢ACMAIN_CHM了,在你的指导下,我终于写出来了,谢谢!
      

  4.   

    贴出我最终的代码以作纪念,顺便结贴给分!select distinct e.id,e.name,e.level,e.up_level
    from crm_district a 
        inner join crm_district b on a.id=b.up_level or a.id=b.id
        inner join crm_district c on b.id=c.up_level or b.id=c.id
        inner join crm_district d on c.id=d.up_level or c.id=d.id
        inner join crm_district e on d.id=e.up_level or d.id=e.id
    where a.id=1