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

नोड से सभी अंतिम स्तर के बच्चे (पत्ते) प्राप्त करें (पदानुक्रमित प्रश्न Oracle 11G)

मुझे लगता है, कुछ इस तरह की चाल चलनी चाहिए:

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH r.id_father IS NULL)
WHERE isleaf = 1

ओह, और वैसे, आप पदानुक्रमित क्वेरी का उपयोग किए बिना भी सभी पत्ते प्राप्त कर सकते हैं। बस सभी नोड्स का चयन करें, जो संबंध तालिका से किसी भी नोड के लिए पिता के नोड नहीं हैं। कुछ ऐसा:

SELECT n.* FROM NODES n
WHERE NOT EXISTS (SELECT ID_FATHER FROM RELATION r
                  WHERE r.id_father = n.id)

निर्दिष्ट नोड से लीफ नोड्स प्राप्त करने के लिए, START WITH क्लॉज में स्थिति बदलें, ट्री को उस नोड से उल्टा शुरू करने के लिए जिसमें आप रुचि रखते हैं। उदाहरण के लिए, यह क्वेरी आपको id =5 के साथ नोड के सभी बच्चों के पत्ते लौटाएगी। :

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH n.id = 5)
WHERE isleaf = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं MAX (स्तंभ मान) के साथ पहली पंक्ति का चयन कैसे कर सकता हूं?

  2. ऑरैकल एसक्यूएल के खंड में एक चर को कैसे पास किया जाए?

  3. सी # से ओडीबीसी का उपयोग कर ओरेकल पैकेज फ़ंक्शन को कॉल करें

  4. उप-चयन से संघ परिणाम

  5. एसक्यूएल कई फ़ील्ड के साथ डुप्लिकेट ढूंढें (कोई अद्वितीय आईडी नहीं) चारों ओर काम करें