समस्या यह है कि क्या तुम सच में सख्त पदानुक्रम के साथ काम नहीं कर रहे हैं; आप निर्देशित ग्राफ से निपट रहे हैं, जहां कुछ ग्राफों में चक्र होते हैं। ध्यान दें कि आपके nbgroup # 1 में कोई कैनोलिक रूट नहीं है - यह सी-ए से चक्रीय संदर्भ के कारण ए, बी, या सी हो सकता है।
इससे निपटने का मूल तरीका ग्राफ तकनीकों के संदर्भ में सोचना है, रिकर्सन नहीं। असल में, एक पुनरावृत्ति दृष्टिकोण (सीटीई का उपयोग नहीं करना) एकमात्र समाधान है जिसे मैं एसक्यूएल में सोच सकता हूं। मूल दृष्टिकोण explained here है।
Here is a SQL Fiddle एक समाधान के साथ जो चक्र और साझा-पत्ते दोनों मामलों को संबोधित करता है। ध्यान दें कि यह पुनरावृत्ति का उपयोग करता है (रनवे प्रक्रियाओं को रोकने के लिए एक असफलता के साथ) और तालिका चर संचालित करने के लिए; मुझे नहीं लगता कि इसके आसपास कोई हो रहा है। ध्यान दें कि परिवर्तित नमूना डेटा (ए-जी बदलकर ए-एच; नीचे समझाया गया है)।
यदि आप एसक्यूएल में खोदते हैं तो आप देखेंगे कि मैंने लिंक में दिए गए समाधान से कुछ महत्वपूर्ण चीजें बदली हैं। वह समाधान अप्रत्यक्ष किनारों से निपट रहा था, जबकि आपके किनारों को निर्देशित किया गया है (यदि आपने अप्रत्यक्ष किनारों का उपयोग किया है तो संपूर्ण नमूना सेट ए-जी कनेक्शन के कारण एक घटक है)।
यह मेरे नमूना डेटा में ए-जी से ए-एच क्यों बदल गया है, इस दिल के लिए यह हो जाता है। समस्या का आपका विनिर्देश सरल है अगर केवल पत्ता नोड्स साझा किए जाते हैं; यह वह विनिर्देश है जिसे मैंने कोड किया था। इस मामले में, ए-एच और जी-एच दोनों बिना किसी समस्या के अपने उचित घटकों तक बंडल हो सकते हैं, क्योंकि हम माता-पिता (यहां तक कि चक्र दिए गए) से पहुंचने के बारे में चिंतित हैं।
हालांकि, जब आपने शाखाएं साझा की हैं, तो यह स्पष्ट नहीं है कि आप क्या दिखाना चाहते हैं। ए-जी लिंक पर विचार करें: यह दिया गया है, जी-एच किसी भी घटक (ए-जी-एच या एफ-जी-एच) में मौजूद हो सकता है। आप इसे दूसरे में डाल देते हैं, लेकिन यह पहले के बजाय पहले हो सकता था, है ना? यह अस्पष्टता इसलिए है कि मैंने इस समाधान में इसे संबोधित करने की कोशिश नहीं की।
संपादित करें: स्पष्ट होने के लिए, ऊपर दिए गए मेरे समाधान में, यदि साझा ब्रैच का सामना करना पड़ता है, तो यह पूरे सेट को एक घटक के रूप में मानता है। आपने ऊपर वर्णित नहीं किया है, लेकिन समस्या को स्पष्ट करने के बाद इसे बदला जाना होगा। उम्मीद है कि यह आपको बंद कर देता है।
अद्यतन: अनंत प्रत्यावर्तन –
के साथ इस मुद्दे "अनंत प्रत्यावर्तन" क्या मतलब है? पदानुक्रम पर कोई सैद्धांतिक सीमा नहीं है? या पदानुक्रम कुछ बिंदुओं पर लूप करता है जैसे कि कुछ शाखाओं पर सचमुच कोई बच्चा नोड नहीं है? - संपादित करें: बाद वाले की तरह दिखता है, तो आप लूप तक पहुंचने पर क्या करना चाहते हैं? –
क्योंकि माता-पिता कुछ मामलों में बच्चे हो सकते हैं –