[英]Sql Server Recursive parent/child same table using same field
我需要讓父母和所有孩子從同一張桌子...
運行此查詢時:
select location, children from lochierarchy where parent ='HSAGCF'
結果:
Location Children
-------- ------------
HSAGCFSMF 1
HSAGEE 1
HSAGGAI 0
HSAGPO 1
HSAGSA 1
HSAGSACC 1
HSAGSAFR 0
HSAGSARV 0
HSAGSASG 0
HSAGSC 1
HSAGSD 1
HSAGSI 1
HSAGSO 1
HSAGSR 0
HSAGST 0
HSAGSTTO 0
當位置有子代= 1時,子代中有更多子代
如何執行遞歸操作,以使此查詢的每個位置都高於其子代= 1的位置,然后再次運行查詢,如下所示:
select location
from lochierarchy
where parent in ( 'HSAGCFSMF', 'HSAGEE', 'HSAGGAI', 'HSAGPO', 'HSAGSA',
'HSAGSACC','HSAGSAFR', 'HSAGSARV', 'HSAGSASG', 'HSAGSC',
'HSAGSD', 'HSAGSI', 'HSAGSO', 'HSAGSR', 'HSAGST',
'HSAGSTTO', 'HSAGSV', 'HSAGU1', 'HSAGU2', 'HSAGU3', 'HSAGU4')
locations Children
---------- ------------
HSAGCFSMF 1
HSAGEE 1
HSAGGAI 0
HSAGPO 1
HSAGSA 1
HSAGSACC 1
HSAGSAFR 0
HSAGSARV 0
HSAGSASG 0
HSAGSC 1
HSAGSD 1
HSAGSI 1
HSAGSO 1
HSAGSR 0
HSAGST 0
HSAGSTTO 0
HSAGSV 0
需要重復執行此遞歸操作,直到所有位置的子代均為= 0
如果您使用的是SQL 2005或更高版本,則可以使用遞歸公用表表達式。 像這樣:
declare @parent varchar(20) = 'HSAGCF';
with cte as (
select location, parent
from lochierarchy
where location = @parent
union all
select c.location, c.parent
from lochierarchy as c
join cte as p
on c.parent = p.location
)
select *
from cte;
如果您想要通往樹中葉節點的路徑,我將其作為練習留給讀者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.