MySQL分层数据,递归cte,同时排除条件下的分支。

问题描述 投票:0回答:1

id A 以此结构

| id | parent_id | permission_type |

我使用了下面的递归 cte 查询来获取对象的所有子代,并使用了 id 1 (在本例中)。

with recursive B (              
                id,
                parent_id,
                permission_type) as (
select          id,
                parent_id,
                permission_type
from       A
where      (id = '1')
union all
select     
                t.id,
                t.parent_id,
                t.permission_type
from        A t
inner join B
        on t.parent_id = B.id 
)select * from B;

问题是,我不想让对象带有一个 permission_type = "no_permission" 也不包括他们的子孙后代。我想排除树的分支,这些分支从一个带有 permission_type = "no_permission".

enter image description here

所以在这种情况下,我希望输出为:(不包括 红色 树枝)

| id | parent_id | permission_type |
====================================
| 1  |    null   |      ''         |
| 2  |    1      |      ''         |
| 3  |    2      |      ''         |

在MySQL中可以这样做吗? 如果可以,如何实现?

请注意。 还有其他的权限类型,但我认为放在这里是不必要的信息。我所关心的只是根据权限类型是 "no_permission "来排除一个分支的能力。

mysql sql recursion recursive-query
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.