चक्रीय संदर्भों के साथ "मज़ा":एसक्यूएल पिता-आईडी-संगठित पेड़ में चक्रीय संदर्भ खोजने के लिए चुनें?
मान लीजिए कि मेरे पास एक टेबल तत्व है जिसमें तत्वों का पदानुक्रम होता है, जिसे पिता आईडी द्वारा मॉडलिंग किया जाता है।
पिता आईडी फ़ील्ड रूट के लिए शून्य है।
अन्य सभी अभिलेखों में पिता तत्व के (ऑटोसेक्टेड) प्राथमिक कुंजी (ID
) के साथ एक गैर-शून्य पिता आईडी है।
उदाहरण के लिए,
SELECT *
FROM Elements
WHERE FATHER_ID not in (SELECT ID FROM Elements)
मैं अमान्य पिता संदर्भ है कि सभी तत्वों को मिल सकता है का उपयोग कर (FATHER_ID
एक विदेशी कुंजी नहीं है, के इस उदाहरण में मान लें)।
लेकिन मैं उन तत्वों को कैसे ढूंढ सकता हूं जिनके पास वैध पिता संदर्भ है लेकिन जिनके पिता संदर्भों की श्रृंखला जड़ में खत्म नहीं होती है? मुझे लगता है कि यह केवल चक्रीय संदर्भों के लिए हो सकता है, उदाहरण के लिए ए बी का पिता है, लेकिन बी ए के पिता भी हैं। इस तरह के "subtree" रूट से जुड़ा हुआ नहीं है और इस प्रकार मुख्य पेड़ का हिस्सा नहीं है। मैं ऐसे सबट्री ढूंढना चाहता हूं।
बेशक, मैं एक ऐसे प्रश्न की तलाश कर रहा हूं जो उन तत्वों को प्रदान करता है जो चक्रवात संदर्भ का कारण बनते हैं चाहे कोई संदर्भ कितनी देर तक हो।
क्या एसक्यूएल में यह संभव है, या मुझे एक पुनरावृत्त समाधान की आवश्यकता है?
बंधन द्वारा के उपयोग के लिए +1। पदानुक्रमित डेटा के साथ यह सभी प्रकार की महान चीजें हो सकती हैं। ध्यान दें कि यह केवल ओरेकल है। 11 जीआर 2 में उन्होंने रिकर्सिव सबक्वायरी फैक्टरिंग क्लॉज (http://technology.amis.nl/blog/6104/oracle-rdbms-11gr2-goodbye-connect-by-or-the-end-of-hierarchical-querying-as- हम जानते हैं) –
ओहा। ऐसा लगता है कि कुछ मंथन करने के लिए, और इसके लायक होने की तरह दिखता है। धन्यवाद। – TheBlastOne