मेरे पास दो टेबल हैं। एक टास्क के लिए है और दूसरा टास्क के लिए डिपेंडेंसी टेबल है। मैं एक विशेष आईडी के आधार पर मुझे सभी कार्यों (पुनरावर्ती) देने के लिए एक प्रश्न चाहता हूं।

मेरे पास दो टेबल हैं। एक टास्क के लिए है

ID  TASK  
1   Abc  
2   Def  
3   Ghi  
4   Jkl  
5   Mno  
6   Pqr 

दूसरा है आश्रित कार्यों को प्राप्त करने के लिए

ID  DEPENDENT_ON  
2   1  
3   1  
4   2  
4   6  
5   2  
6   5  

क्या किसी विशेष कार्य पर निर्भर सभी कार्यों (पुनरावर्ती) की सूची प्राप्त करने के लिए एक एसक्यूएल क्वेरी लिखना संभव है।

उदाहरण।
मैं आईडी = 1 पर निर्भर सभी कार्यों की जांच करना चाहता हूं। अपेक्षित आउटपुट (जो 2 और 3 है):

2.Def
3.Ghi 

इसके अलावा क्वेरी को इन दो आश्रित कार्यों का आउटपुट भी देना चाहिए और इसी तरह। अंतिम आउटपुट होना चाहिए:

2.Def -- level one
3.Ghi -- level one 
4.Jkl -- Dependent on task 2  
5.Mno -- Dependent on task 2 
6.Pqr -- Dependent on task 5

स्वरूपण महत्वपूर्ण नहीं है। बस आउटपुट की आवश्यकता है

1
Kash 6 अप्रैल 2019, 10:08

1 उत्तर

सबसे बढ़िया उत्तर

मुझे दो तालिकाओं में शामिल होने और फिर एक पुनरावर्ती खोज करने की आवश्यकता है।

आपको मूल आईडी से DEPENDENT_ON के माध्यम से दूसरी तालिका (जिसे आपने नाम नहीं दिया था, इसलिए मैंने इसे TASK_TREE कहा है) में शामिल होना चाहिए। बाहरी जुड़ाव क्योंकि कार्य 1 पेड़ का शीर्ष है और बिना किसी कार्य के निर्भर करता है। फिर पेड़ पर चलने के लिए Oracle के पदानुक्रमित क्वेरी सिंटैक्स का उपयोग करें:

select t.id, t.task, tt.dependent_on, level
from tasks t
     left outer join task_tree tt on tt.id = t.id
connect by prior t.id = tt.dependent_on 
start with t.id = 1
/

मैंने level को शामिल किया है ताकि आप देख सकें कि पेड़ कैसे फड़फड़ाता है। Oracle SQL दस्तावेज़ में पदानुक्रमित प्रश्नों को गहराई से शामिल किया गया है। और जानें। यदि आप Oracle के स्वामित्व पदानुक्रमित सिंटैक्स का उपयोग नहीं करना चाहते हैं, तो 11gR2 Oracle से खंड के साथ पुनरावर्ती समर्थित है। और जानें

संयोग से, आपके पोस्ट किए गए डेटा में त्रुटि है। टास्क 4 2 और 6 दोनों पर निर्भर करता है। पदानुक्रम में चाइल्ड नोड्स होने चाहिए जो सिंगल पैरेंट नोड पर निर्भर हों। अन्यथा आपको हर तरह के अजीब परिणाम मिलेंगे।

0
APC 6 अप्रैल 2019, 08:11