/ / SQL क्वेरी पूर्ण पदानुक्रम पथ प्राप्त करने के लिए - sql-server, tsql

पूर्ण पदानुक्रम पथ प्राप्त करने के लिए एसक्यूएल क्वेरी - एसक्यूएल-सर्वर, tsql

मेरे पास तीन कॉलम NodeId के साथ एक तालिका है,पैरेंटोडायड, नोडेनैम। प्रत्येक नोड के लिए मैं "lvl1 / lvl2 / lvl3 ..." जैसे पूर्ण पथ प्राप्त करना चाहूंगा जहां lvl1, lvl2 और lvl3 नोड नाम हैं। मुझे एक फ़ंक्शन मिला, जो इस लिंक पर करता है http://www.sql-server-helper.com/functions/get-tree-path.aspx। लेकिन मैं दक्षता के लिए सीटीई या किसी अन्य तकनीक का उपयोग करना चाहूंगा। कृपया मुझे बताएं कि क्या इसे बेहतर तरीके से हासिल करना संभव है। अग्रिम में धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 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

जवाब के लिए 4 № 2

मैं इसे इस तरह से हल किया, जो समाधान के समान है।

    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

जवाब के लिए 0 № 3

मेरे अनुभव में, सबसे कुशल तरीका, होगाएक अतिरिक्त फ़ील्ड जोड़ने के लिए हो, RootNodeID, जिसमें ट्रेस्ट्रक्चर के टॉपवेल नोड की आईडी हो। तो आप एक पूरे ट्रेकस्ट्रक्चर में बहुत सरल और कुशल तरीके से सभी नोड्स को क्वेरी कर सकते हैं।

और उस ट्रेस्ट्रक्चर का निर्माण करने के लिए, आपके आवेदन में एक सरल पुनरावर्ती कार्य ठीक काम करना चाहिए।

मुझे पता है कि यह नामकरण और कुछ लोग हैंडॉन "वास्तव में अवधारणा का अनुमोदन नहीं करता है, लेकिन मैंने अपने पेशेवर अनुभव में सीखा है कि यह एक विस्तृत प्रदर्शन वृद्धि लाता है, जैसा कि एक विस्तृत टी-स्क्लर स्क्रिप्ट के विपरीत है।