设置admin为顶,同一行中的pname  介绍了use_name  , 请问 admin为起始 如何统计 admin介绍了多少层 ,pname  介绍了use_name 一次就为一层。 MYSQL 查询语句如何写

解决方案 »

  1.   

    with RECURSIVE tmp(user_name, p_name) as (
    select 'admin' as user_name, null as p_name from dual union all
    select 'gs1' as user_name, 'admin' as p_name from dual union all
    select 'gs2' as user_name, 'gs1' as p_name from dual union all
    select 'gs3' as user_name, 'gs1' as p_name from dual union all
    select 'gs4' as user_name, 'gs2' as p_name from dual union all
    select 'cqc' as user_name, 'gs4' as p_name from dual union all
    select 'bxp' as user_name, 'cqc' as p_name from dual),
    tmp1(user_name, p_name, lvl, p_path) as(
    select user_name, p_name, 0 as lvl, cast(user_name as char(200)) as p_path from tmp where p_name is null
    union all
    select t2.user_name, t2.p_name, t1.lvl + 1 as lvl, concat(t1.p_path, '->', t2.user_name) as path 
    from tmp1 t1 inner join tmp t2 on t1.user_name = t2.p_name)
    select * from tmp1;
      

  2.   

    https://dev.mysql.com/doc/refman/8.0/en/with.html    多看手册,里面基本上都会有。