[英]how to find the last level child nodes in tree kind structure in database using SQL
[英]How to know if a child exists on any nest level in a tree structure
我有一個樹形表,如下所示:
TREE (TreeID int PK, ParentID int)
我要弄清楚的是,如果我選擇一個Tree項,如何知道該子項是否存在於其父項的任何子級別中,並且如果它是一個函數,我會假設它看起來像這樣?
@ParentID --@param, The TreeID of the Tree item in focus
SELECT TreeID
FROM TREE
WHERE dbo.IsATreeChild(TreeID,@ParentID) = 1
基本上,如果TreeId
IsATreeChild
@ParentID
應該返回true。 我只是不明白該怎么做。
有什么建議么?
遞歸CTE是樹木處理中非常常見的助手。
可能您會發現有用的以下功能:
create function dbo.ftTreeNodeChildren(@treeID int)
RETURNS TABLE
AS RETURN
with Children(TreeID) as (
select TreeID
from Tree
where ParentID = @treeID
union all
select T.TreeID
from Children C
join Tree T on T.ParentID = C.TreeID
)
select TreeID
from Children
GO
然后可以將其用作:
select TreeID
from dbo.ftTreeNodeChildren(@treeID)
其中應列出@treeID
(如果有的話)。
有時,包含@treeID
本身會很有用。 在這種情況下,可以使用類似的功能:
create function dbo.ftTreeNodeSubtree(@treeID int)
RETURNS TABLE
AS RETURN
with Subtree(TreeID) as (
select TreeID
from Tree
where TreeID = @treeID
union all
select T.TreeID
from Subtree S
join Tree T on T.ParentID = S.TreeID
)
select TreeID
from Subtree
GO
其中應列出子代或@treeID
(如果有的話),包括@treeID
本身。
UPD:要檢查@treeID
是一個孩子@parentID
在任何級別的,你可以用第一個函數為:
if exists (
select 1
from dbo.ftTreeNodeChildren(@parentID)
where TreeID = @treeID
)
print '@treeID is a child of @parentID'
else
print '@treeID is NOT a child of @parentID'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.