Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个父级及其子级的MySQL返回列表_Mysql_Sql_Plsql_Mysql Workbench_Recursive Query - Fatal编程技术网

每个父级及其子级的MySQL返回列表

每个父级及其子级的MySQL返回列表,mysql,sql,plsql,mysql-workbench,recursive-query,Mysql,Sql,Plsql,Mysql Workbench,Recursive Query,我有一张如下表: Manager是父资源,其下有子资源,这些子资源已加入到Manager的父id中 id | parent_id | Role | Number of roles 123 | 123 | Manager | 2 124 | 123 | Resource | 1 125 | 123 | Resource | 2 128 | 128

我有一张如下表:

Manager是父资源,其下有子资源,这些子资源已加入到Manager的父id中

id    | parent_id   |   Role       | Number of roles

123   | 123         | Manager      |    2

124   | 123         | Resource     |    1

125   | 123         | Resource     |    2

128   | 128         | Manager      |    1

126   | 128         | Resource     |    4

127   | 128         | Resource     |    3
我的sql查询应为每个父级返回以下结果:

id    | parent_id   |   Role       | Sum of manager only | Total resources

123   | 123         | Manager      |    2                |    2+1+2 = 5 (Manager + the total number of resources for parent id 123)   

128   | 128         | Manager      |    1                |    1+4+3 = 8 (Manager + the total number of resources for parent id 128)   
任何帮助都将不胜感激。谢谢。

我希望这样做可以:

SELECT 
    m1.*, m2.sum_roles
FROM
    managers_workers m1
        LEFT JOIN
    (SELECT 
        parent_id, SUM(num_of_roles) AS sum_roles
    FROM
        managers_workers
    GROUP BY parent_id) AS m2 ON m1.id = m2.parent_id
WHERE
    m2.parent_id IS NOT NULL
;

您只需要使用父id进行自连接。如果表名为“tbl_manager”

您可以使用子查询

select
    (select id from mytbl where id=r.parent_id)  id
    ,r.parent_id
    ,(select sum(NofRole) from mytbl where parent_id=r.parent_id and Role='Manager') [Sum of manager only]
    , sum(r.nofrole) [Total resources]
    from mytbl r
    group by r.parent_id

子查询应该是最后一个选项,因为它会降低系统的速度。
select
    (select id from mytbl where id=r.parent_id)  id
    ,r.parent_id
    ,(select sum(NofRole) from mytbl where parent_id=r.parent_id and Role='Manager') [Sum of manager only]
    , sum(r.nofrole) [Total resources]
    from mytbl r
    group by r.parent_id