创建部门表如下:
CREATE TABLE dept ( did int, d_name VARCHAR(15),pid int);
插入数据如下 (pid==0表示没有上级部门) 
   insert into dept(did,d_name,pid) values(1,'产品部',0)
   insert into dept(did,d_name,pid) values(2,'手机研发','1')
   insert into dept(did,d_name,pid) values(3,'无线产品','1')
   
   insert into dept(did,d_name,pid) values(4,'人事部',0)
   insert into dept(did,d_name,pid) values(5,'财务科',4)
   insert into dept(did,d_name,pid) values(6,'招聘部',4)
   insert into dept(did,d_name,pid) values(7,'上海招聘部',6)
   insert into dept(did,d_name,pid) values(8,'北京招聘部',6)
现在想用sql实现
 部门名称,部门代号,上级部门,部门深度,是否有下级部门
 产品部       1       无        1         是
 手机研发     2       产品部    2         否
 无线产品     3       产品部    2         否
.......
请高手指点

解决方案 »

  1.   

    要用SP来实现,MYSQL目前不支持递归查询
      

  2.   

    mysql> select * from dept;
    +------+------------+------+
    | did  | d_name     | pid  |
    +------+------------+------+
    |    1 | 产品部     |    0 |
    |    2 | 手机研发   |    1 |
    |    3 | 无线产品   |    1 |
    |    4 | 人事部     |    0 |
    |    5 | 财务科     |    4 |
    |    6 | 招聘部     |    4 |
    |    7 | 上海招聘部 |    6 |
    |    8 | 北京招聘部 |    6 |
    +------+------------+------+
    8 rows in set (0.00 sec)mysql> select d_name as `部门名称`,did as `部门代号`,
        ->  (select d_name from dept where did=a.pid) as `上级部门`,
        ->  if((select count(*) from dept where pid=a.did)>0,'是','否') as `是否有下级部门`
        -> from dept a;
    +------------+----------+----------+----------------+
    | 部门名称   | 部门代号 | 上级部门 | 是否有下级部门 |
    +------------+----------+----------+----------------+
    | 产品部     |        1 | NULL     | 是             |
    | 手机研发   |        2 | 产品部   | 否             |
    | 无线产品   |        3 | 产品部   | 否             |
    | 人事部     |        4 | NULL     | 是             |
    | 财务科     |        5 | 人事部   | 否             |
    | 招聘部     |        6 | 人事部   | 是             |
    | 上海招聘部 |        7 | 招聘部   | 否             |
    | 北京招聘部 |        8 | 招聘部   | 否             |
    +------------+----------+----------+----------------+
    8 rows in set (0.05 sec)mysql>
      

  3.   

    部门深度 需要用存储过程来实现。你可以参考下贴中的例子。
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
    MySQL中进行树状所有子节点的查询