我有一个外键自相关的表,但不知道如何接收满足条件的第一个子代或后代。my_table结构为:
| 身份证|父代标识|类型|
| - ------| - ------| - ------|
| 1个|零|联合|
| 第二章|1个|群|
| 三个|第二章|群|
| 四个|三个|离开|
| 五个|1个|离开|
| 六个|五个|单位|
| 七|1个|单位|
对于id 1(union),我应该接收所有直接子节点或第一个子节点,不包括第一个子节点和union之间的所有组。
| 身份证|类型|
| - ------| - ------|
| 四个|离开|
| 五个|离开|
| 七|单位|
id为4,因为它通过id为3的组以及id为2和5的组连接到联合,因为它直接连接到联合。
我试着用递归部分的条件来写递归查询:当parent_id = 1或parent_type ="离开"但未产生预期结果时
with recursive cte AS (
select b.id, p.type_id
from my_table b
join my_table p on p.id = b.parent_id
where b.id = 1
union
select c.id, cte.type_id
from my_table c
join cte on cte.id = c.parent_id
where c.parent_id = 1 or cte.type_id = 'group'
)
2条答案
按热度按时间4zcjmb1e1#
以下是我的解读:
1.如果
type='group'
,则将id
和parent_id
视为同一组id#1
和id#2
在同一组中,它们相等id#2
和id#3
在同一组中,它们相等id#1
、id#2
和id#3
在同一组中如果上面的结果是正确的,那么你需要得到
id#1
的组的所有第一个后代。1.使用
id#1
获取同一组中的所有id
1.获取上述组的所有第一个后代(
type not in ('union', 'group')
)结果:
tyu7yeag2#
听起来好像您想从id为
1
的行开始,然后得到它的子行,接着递归地处理类型为group
的行。