प्रथम स्तर के लिए आपकी क्वेरी (यहां depth
तालिका से अलग करने के लिए) इस तरह दिखना चाहिए:
select l.name, h.child_id, 1 as depth
from level l
join level_hierarchy h on l.id = h.child_id
where h.parent_id is null;
name | child_id | depth
----------+----------+-------
Level1_a | 1 | 1
(1 row)
ध्यान दें कि is null
(=
का प्रयोग न करें null
. से तुलना करने के लिए क्योंकि यह हमेशा null
देता है )।
आप एक पुनरावर्ती सीटीई में प्रारंभिक क्वेरी के रूप में उपरोक्त का उपयोग कर सकते हैं:
with recursive recursive_query as (
select l.name, h.child_id, 1 as depth
from level l
join level_hierarchy h on l.id = h.child_id
where h.parent_id is null
union all
select l.name, h.child_id, depth + 1
from level l
join level_hierarchy h on l.id = h.child_id
join recursive_query r on h.parent_id = r.child_id
)
select *
from recursive_query
-- where depth = 2
name | child_id | depth
----------+----------+-------
Level1_a | 1 | 1
Level2_b | 3 | 2
Level2_a | 19 | 2
Level3_a | 4 | 3
Level3_b | 5 | 3
Level4_a | 6 | 4
Level4_b | 7 | 4
(7 rows)