2011-04-27 6 views
6

चक्रीय संदर्भों के साथ "मज़ा":एसक्यूएल पिता-आईडी-संगठित पेड़ में चक्रीय संदर्भ खोजने के लिए चुनें?

मान लीजिए कि मेरे पास एक टेबल तत्व है जिसमें तत्वों का पदानुक्रम होता है, जिसे पिता आईडी द्वारा मॉडलिंग किया जाता है।

पिता आईडी फ़ील्ड रूट के लिए शून्य है।

अन्य सभी अभिलेखों में पिता तत्व के (ऑटोसेक्टेड) ​​प्राथमिक कुंजी (ID) के साथ एक गैर-शून्य पिता आईडी है।

उदाहरण के लिए,

SELECT * 
FROM Elements 
WHERE FATHER_ID not in (SELECT ID FROM Elements) 

मैं अमान्य पिता संदर्भ है कि सभी तत्वों को मिल सकता है का उपयोग कर (FATHER_ID एक विदेशी कुंजी नहीं है, के इस उदाहरण में मान लें)।

लेकिन मैं उन तत्वों को कैसे ढूंढ सकता हूं जिनके पास वैध पिता संदर्भ है लेकिन जिनके पिता संदर्भों की श्रृंखला जड़ में खत्म नहीं होती है? मुझे लगता है कि यह केवल चक्रीय संदर्भों के लिए हो सकता है, उदाहरण के लिए ए बी का पिता है, लेकिन बी ए के पिता भी हैं। इस तरह के "subtree" रूट से जुड़ा हुआ नहीं है और इस प्रकार मुख्य पेड़ का हिस्सा नहीं है। मैं ऐसे सबट्री ढूंढना चाहता हूं।

बेशक, मैं एक ऐसे प्रश्न की तलाश कर रहा हूं जो उन तत्वों को प्रदान करता है जो चक्रवात संदर्भ का कारण बनते हैं चाहे कोई संदर्भ कितनी देर तक हो।

क्या एसक्यूएल में यह संभव है, या मुझे एक पुनरावृत्त समाधान की आवश्यकता है?

उत्तर

5
SELECT n.*, CONNECT_BY_ROOT(id), level 
FROM elements n 
START WITH 
     id IN 
     (
     SELECT MIN(id) 
     FROM (
       SELECT id, CONNECT_BY_ROOT(id) AS root 
       FROM elements 
       START WITH 
         id IN 
         (
         SELECT id 
         FROM elements n 
         WHERE CONNECT_BY_ISCYCLE = 1 
         CONNECT BY NOCYCLE 
           father_id = PRIOR id 
         ) 
       CONNECT BY NOCYCLE 
         id = PRIOR father_id 
       ) 
     GROUP BY 
       root 
     ) 
CONNECT BY NOCYCLE 
     id = PRIOR father_id 

आप इस लेख को पढ़ने के लिए चाहते हो सकता है:

+0

बंधन द्वारा के उपयोग के लिए +1। पदानुक्रमित डेटा के साथ यह सभी प्रकार की महान चीजें हो सकती हैं। ध्यान दें कि यह केवल ओरेकल है। 11 जीआर 2 में उन्होंने रिकर्सिव सबक्वायरी फैक्टरिंग क्लॉज (http://technology.amis.nl/blog/6104/oracle-rdbms-11gr2-goodbye-connect-by-or-the-end-of-hierarchical-querying-as- हम जानते हैं) –

+0

ओहा। ऐसा लगता है कि कुछ मंथन करने के लिए, और इसके लायक होने की तरह दिखता है। धन्यवाद। – TheBlastOne

संबंधित मुद्दे