每个父级及其子级的MySQL返回列表
我有一张如下表: Manager是父资源,其下有子资源,这些子资源已加入到Manager的父id中每个父级及其子级的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
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