मुझे लगता है, कुछ इस तरह की चाल चलनी चाहिए:
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