c# - SQL To Get Parent From Self Referencing Table - September 15, 2011 Get link Facebook X Pinterest Email Other Apps मेरे पास इस तरह एक तालिका है: आइटम {int ItemID int ParentID string name} वस्तु वास्तव में एक बड़ी तालिका वस्तु का एक सबसेट है: ऑब्जेक्ट {int ObjectID स्ट्रिंग रंग} तो ItemID एक कोड है कोड> ObjectID आइटम , ParentID के भीतर या तो किसी अन्य आइटम को या मूल ऑब्जेक्ट को संदर्भित कर सकता है। मैं क्या करना चाहता हूं, इससे पुनरावृत्त हो सकता है आइटम रिश्ते में एक पत्ती अपने माता-पिता के माध्यम से सभी तरह से जब तक मैं यह निर्धारित नहीं कर सकता कि ObjectID कोई दिए गए आइटम पट्टी से उतरता है। मैं इसे SQL में करना चाहता हूं । मैं SQL Server 2008 का उपयोग कर रहा हूं। यहां मैं जो सोच रहा हूं मैं केवल आइटम ParentID के माध्यम से पुनरावृति कर सकता हूं जब तक कि मैं किसी अन्य मद के साथ ParentID में शामिल नहीं हो सकता यह ParentID है ObjectID मुझे वापस जाना है। मैं इसे अंदरूनी मिलकर उपयोग करने के लिए इसे प्राप्त करने का प्रयास कर रहा हूं, लेकिन कोई भाग्य नहीं है। मैं सी # का उपयोग कर रहा हूं, अगर यह लिनक में किया जा सकता है, जिस पर मुझे संदेह नहीं है कि यह बहुत खराब नहीं हो सकता है, तो यह ठीक भी होगा। उत्तर मैं साथ गया: < पूर्व> <कोड> ऑब्जेक्टएच (पेरेंटआईडी, मदआईड, लेवल) के साथ (- बेस केस का चयन करें पेरेन्टआईडी, मदआईड, 1 से आइटम के स्तर के अनुसार जहां आइटम आईडी = @ पीआरएएम यूनियन सभी - पुनरावर्ती चरण का चयन i। पेरेंटआईडी, आई.आई.टीएएमआईडी, ओह। स्तर + 1 के रूप में आइटम से I में शामिल हों ObjectH ओह सी। IitemID = ओह। ParentID) SELECT TOP 1 ParentID से ऑब्जेक्ट ऑर्डर ऑर्डर ऑब्जेक्ट लेवल डीईएससी यह काम करता है। पुनरावर्ती SQL सर्वर सीटीई के साथ ऐसा करने की कोशिश में मेरा प्रयास तार्किक रूप से, यह सीटीई कैसे काम करता है और यह होना चाहिए, लेकिन मैंने इसे बिल्कुल आपके जैसे एक स्कीमा के साथ कभी इस्तेमाल नहीं किया है आमतौर पर एसक्यूएल में एक वृक्ष संरचना में अतिरिक्त अभिभावक "वस्तु" तालिका नहीं होती है। ( ऐसा लगता है कि आप अपने ऑब्जेक्ट्स को ठीक से 1: 1 डीबी में डिज़ाइन कर रहे हैं? मुझे लगता है कि यदि आप थे तो मैं उस पैटर्न को पुनः लेगा ) इसे आज़माएं और मुझे बताएं अगर यह काम करता है। संपादित करें: आधार क्वेरी स्थिति थोड़ी EDIT2: इसे एक आइटम के लिए विशिष्ट बनाने के लिए क्वेरी बदल दी < ऑब्जेक्ट हियरआर्की (मद आईडीआईडी, नाम, पेरेंटआईडी, लेवल) के साथ / p> वस्तु के रूप में (आइटम का चयन करें आइटम, नाम, पेरेंटआईडी, 1 वस्तु से वस्तु के रूप में, वस्तु ओके WHERE.ParentID = ob.ObjectID और ob.ItemID = @itemIdTeBeSelected यूनिअस सभी का चयन i.ItemID, i.Name, i.ParentID, ओह। स्तर + 1 के रूप में आइटम से IInner ऑब्जेक्ट हयात में शामिल हों ओ ओ पर। ParentID = ओह। आईटेमैड और ओह। IitemID = @itemIdToBeSearched) चुनें parentID ऑब्जेक्ट वर्चुअरी से जहां LEVEL = 1 Comments