PostgreSQL में पुनरावर्ती प्रश्नों का निर्माण पहले प्रारंभिक . निर्दिष्ट करके किया जाता है पंक्तियों का सेट (गैर-पुनरावर्ती शब्द , यानी पदानुक्रम के मूल या अंतिम स्तर पर)। बाद के पुनरावृत्तियों (पुनरावर्ती शब्द . से अधिक , UNION ALL
. के बाद उप-क्वेरी ) फिर परिणाम सेट में पंक्तियां जोड़ें इनपुट पंक्ति सेट में शेष पंक्तियों से जब तक कोई और पंक्तियाँ नहीं जोड़ी जातीं।
आपके मामले में, प्रारंभिक उप-क्वेरी अनफ़िल्टर्ड है, इसलिए आप प्रारंभिक रन पर केवल सभी पंक्तियों को जोड़ते हैं, बाद के रनों के लिए कुछ भी नहीं छोड़ते हैं।
निम्न का प्रयास करें:
WITH RECURSIVE q AS (
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
WHERE sub_tree_id = 0 -- this initially selects only "root" rows
UNION ALL
SELECT po.catalog_id,po.sub_tree_id
FROM my_catalog po
JOIN q ON q.catalog_id=po.sub_tree_id
)
SELECT * FROM q;