700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点

SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点

时间:2019-04-07 17:30:46

相关推荐

SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点

--建立測試環境

Create Table A

(IDInt,

fatherIDInt,

NameVarchar(10)

)

Insert A Select 1, NULL, 'tt'

Union All Select 2, 1, 'aa'

Union All Select 3, 1, 'bb'

Union All Select 4, 2, 'cc'

Union All Select 5, 2, 'gg'

Union All Select 6, 4, 'yy'

Union All Select 7, 4, 'jj'

Union All Select 8, 7, 'll'

Union All Select 9, NULL, 'uu'

Union All Select 10, 9, 'oo'

GO

--建立函數

//取字子节点

Create Function GetChildren(@ID Int)

Returns @Tree Table (ID Int, fatherID Int, Name Varchar(10))

As

Begin

Insert @Tree Select ID, fatherID, Name From A Where fatherID = @ID

While @@Rowcount > 0

Insert @Tree Select A.ID, A.fatherID, A.Name From A A Inner Join @Tree B On A.fatherID = B.ID And A.ID Not In (Select ID From @Tree)

Return

End

GO

//取父节点

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

GO

ALTER Function [dbo].[GetParent](@ID Int)

Returns @Tree Table (ID Int, fatherID Int, NameVar Varchar(10))

As

Begin

Insert @Tree Select ID, fatherID, NameVar From A Where ID = @ID

While @@Rowcount > 0

Insert @Tree Select A.ID, A.fatherID, A.NameVar From A A Inner Join @Tree B On A.ID = B.fatherID And A.ID Not In (Select ID From @Tree)

Return

End

--測試

Select * From dbo.GetChildren(1)

Select * From dbo.GetParent(9)

GO

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。