मेरे पास तीन कॉलम NodeId, ParentNodeId, NodeName के साथ एक तालिका है। प्रत्येक नोड के लिए मैं "lvl1/lvl2/lvl3 ..." जैसे एक पूर्ण पथ प्राप्त करना चाहता हूं, जहां lvl1, lvl2 और lvl3 नोड नाम हैं। मुझे एक फ़ंक्शन मिला जो इस लिंक पर http://www.sql-server-helper.com/functions/get-tree-path.aspx करता है। लेकिन मैं दक्षता के लिए सीटीई या किसी अन्य तकनीक का उपयोग करना चाहता हूं। यदि बेहतर तरीके से इसे हासिल करना संभव है तो कृपया मुझे बताएं। अग्रिम में धन्यवाद।पूर्ण पदानुक्रम पथ प्राप्त करने के लिए SQL क्वेरी
5
A
उत्तर
6
यहां एक सीटीई संस्करण है।
declare @MyTable table (
NodeId int,
ParentNodeId int,
NodeName char(4)
)
insert into @MyTable
(NodeId, ParentNodeId, NodeName)
select 1, null, 'Lvl1' union all
select 2, 1, 'Lvl2' union all
select 3, 2, 'Lvl3'
declare @MyPath varchar(100)
;with cteLevels as (
select t.NodeId, t.ParentNodeId, t.NodeName, 1 as level
from @MyTable t
where t.ParentNodeId is null
union all
select t.NodeId, t.ParentNodeId, t.NodeName, c.level+1 as level
from @MyTable t
inner join cteLevels c
on t.ParentNodeId = c.NodeId
)
select @MyPath = case when @MyPath is null then NodeName else @MyPath + '/' + NodeName end
from cteLevels
order by level
select @MyPath
0
लिए सबसे कारगर तरीका, मेरे अनुभव में, एक अतिरिक्त क्षेत्र, RootNodeID जोड़ने के लिए, treestructure की उच्चस्तरीय नोड की आईडी से युक्त होगा। तो आप एक संपूर्ण प्रक्रिया में सभी नोड्स को एक बहुत ही सरल और कुशल तरीके से पूछ सकते हैं।
और उस शोध को बनाने के लिए, आपके आवेदन में एक सरल पुनरावर्ती कार्य ठीक काम करना चाहिए।
मुझे पता है कि यह denormalization है, और कुछ लोग वास्तव में अवधारणा को स्वीकार नहीं करते हैं, लेकिन मैंने अपने पेशेवर अनुभव में सीखा है कि यह एक विस्तृत टी-एसक्यूएल स्क्रिप्ट के विपरीत, एक बड़ा प्रदर्शन वृद्धि लाता है।
4
मैंने इसे इस तरह हल किया, जो जो के समाधान के समान था।
with cte (NodeId,NodeName,hierarchyPath)as
(
select NodeId,NodeName, NodeName
from Node
where ParentNodeId is null
union all
select n.NodeId, n.NodeName, CONVERT(varchar(256), cte.hierarchyPath + '/' + n.NodeName)
from Node n
join cte on n.ParentNodeId = cte.NodeId
)
select *
from cte
order by NodeId
संबंधित मुद्दे
- 1. SQL सर्वर पूर्ण-पाठ क्वेरी
- 2. नवीनतम मूल्य प्राप्त करने के लिए SQL क्वेरी
- 3. क्वेरी करने के लिए क्वेरी कैशिंग jQuery स्वत: पूर्ण
- 4. सापेक्ष पथ प्राप्त करने के लिए एक पूर्ण पथ से आधारित को कैसे पट्टी करें?
- 5. बूस्ट :: फाइल सिस्टम के साथ पूर्ण पथ प्राप्त करें :: पथ
- 6. symlink फ़ाइल के लिए पूर्ण पथ कैसे प्राप्त करें?
- 7. एक SQL क्वेरी अनुकूलन पूर्ण तालिका स्कैन
- 8. स्थानीयकृत पथ प्राप्त करने के लिए फ़ंक्शन?
- 9. पूर्ण पथ
- 10. SQL क्वेरी के लिए पंक्ति गणना प्राप्त करने के लिए सबसे कम महंगी विधि क्या है?
- 11. फ़ाइल का पूर्ण पथ प्राप्त करना
- 12. आवश्यकता के लिए PHP पूर्ण पथ
- 13. SQL क्वेरी
- 14. क्वेरी स्ट्रिंग प्राप्त करने के लिए क्वेरी स्ट्रिंग PHP
- 15. सी # में पूर्ण पथ के सापेक्ष पथ?
- 16. nginx में error_page के लिए पूर्ण पथ?
- 17. एसक्यूएल - सर्वर का आईपी पता प्राप्त करने के लिए क्वेरी
- 18. लिनक्स में प्रोग्रामेटिक रूप से दिए गए सापेक्ष पथ के लिए पूर्ण पथ कैसे प्राप्त करें?
- 19. सिस्टम पथ चर के साथ पथ से पूर्ण पथ कैसे प्राप्त करें?
- 20. तालिका क्वेरी के साथ SQL क्वेरी जॉइन
- 21. SQL क्वेरी
- 22. SQL क्वेरी
- 23. SQL क्वेरी
- 24. SQL क्वेरी
- 25. शक्तियों में डॉटनेटेट के साथ पूर्ण पथ पदानुक्रम केवल फाइलों को ज़िप कैसे करें?
- 26. क्या दो पूर्ण पथ इनपुट दिए गए सापेक्ष पथ को प्राप्त करने के लिए सी # में कोई विधि मौजूद है?
- 27. SQL क्वेरी
- 28. गैर डुप्लिकेट रिकॉर्ड के लिए SQL क्वेरी
- 29. वर्तमान प्रक्रिया के लिए निष्पादन योग्य perl के लिए पूर्ण पथ प्राप्त करना
- 30. SQL क्वेरी
कोई भी मौका है कि आप मेरे मामले के लिए इस उत्तर को अनुकूलित करने में मेरी मदद कर सकते हैं? http://stackoverflow.com/q/5549480/93202 –