PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

आसन्न सूची के आधार पर पदानुक्रमित डेटा के लिए पुनरावर्ती क्वेरी

प्रथम स्तर के लिए आपकी क्वेरी (यहां 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)    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका, फ़ील्ड और स्कीमा नाम का उपयोग करके संदर्भित तालिका का नाम खोजें

  2. Postgresql तालिकाएँ मौजूद हैं, लेकिन क्वेरी करते समय संबंध प्राप्त करना मौजूद नहीं है

  3. पोस्टग्रेएसक्यूएल सबक्वेरी लाइक . का उपयोग कर रहा है

  4. PSQLException पकड़ा नहीं जा रहा है

  5. Postgresql डंप अनुमति अस्वीकृत