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"
.
所以在这种情况下,我希望输出为:(不包括 红色 树枝)
| id | parent_id | permission_type |
====================================
| 1 | null | '' |
| 2 | 1 | '' |
| 3 | 2 | '' |
在MySQL中可以这样做吗? 如果可以,如何实现?
请注意。 还有其他的权限类型,但我认为放在这里是不必要的信息。我所关心的只是根据权限类型是 "no_permission "来排除一个分支的能力。