我需要让父母和所有孩子都来自同一张桌子......
运行此查询时:
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
答案 0 :(得分:1)
如果您使用的是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;
如果你想要树中叶子节点的路径,我把它留给读者练习。