场景
公司中有各种大大小小的团队,团队里面有团队成员,团队成员可以是小团队或者个人,给定任意一个人的ID,需要统计出这个人所属的所有团队名称,包括上级团队。
方案
实际表结构如下图:
可以看到这个结构有点类似于树形自关联,但又不完全是,多了一张中间表来维护关联关系。
这个场景下有两张表:t_team 团队、t_relation 团队成员关联。
由于包含数据嵌套,需要通过递归来实现统计查询,SQL如下:
WITH recursive_query (id, name) AS (
SELECT go.id,go.name FROM t_team go
inner join t_relation ge on go.id=ge.team_id
inner join t_team ee on ee.id=ge.member_id
WHERE ee.id='张三'
UNION ALL
SELECT t.id, t.name FROM t_team t
inner join t_relation e on e.team_id=t.id
INNER JOIN recursive_query r ON e.member_id= r.id
) SELECT name FROM recursive_query
注意:使用此方法需要保证数据不会出现自循环,否则会卡死