我想要帮助检索父子孙子等等
这就是我的数据的样子
NODE PARENTNODE ID
----------------------
2 1 DEF
3 2 ABC1
4 2 ABC2
5 4 ABCC3
6 5 XYZ3
22 11 DEF
23 22 DEF1
24 23 DEF2
25 23 DEF3
26 23 DEF4
27 22 DEF5
28 27 DEF6
每次我的父母-ID = DEF ..因为我的上述数据 - 我有2个父母
NODE PARENTNODE ID
------------------------
2 1 DEF
22 11 DEF
因此,当用户查找Parent ID = DEF且Parent Node = 1时,我的结果应为
NODE PARENTNODE ID
-------------------------
2 1 DEF
3 2 ABC1
4 2 ABC2
5 4 ABCC3
6 5 XYZ3
因此,当用户正在寻找Parent ID = DEF和Parent Node = 11时,我的结果应为
NODE PARENTNODE ID
----------------------
22 11 DEF
23 22 DEF1
24 23 DEF2
25 23 DEF3
26 23 DEF4
27 22 DEF5
28 27 DEF6
因此,想法是子节点成为父节点,它最多可以达到5个级别。
任何帮助将不胜感激
提前致谢
答案 0 :(得分:0)
使用时应使用一些额外的列,如血统,深度到存储级别和父信息。您可以关注this文章来了解一下。
答案 1 :(得分:0)
您可以使用此脚本
DECLARE @Temp TABLE (NODE INT, PARENTNODE INT, ID VARCHAR(10))
INSERT INTO @Temp VALUES
(2 ,1 ,'DEF'),
(3 ,2 ,'ABC1'),
(4 ,2 ,'ABC2'),
(5 ,4 ,'ABCC3'),
(6 ,5 ,'XYZ3'),
(22 ,11 ,'DEF'),
(23 ,22 ,'DEF1'),
(24 ,23 ,'DEF2'),
(25 ,23 ,'DEF3'),
(26 ,23 ,'DEF4'),
(27 ,22 ,'DEF5'),
(28 ,27 ,'DEF6')
;WITH CTE AS (
select NODE , PARENTNODE , ID from @Temp WHERE ID ='DEF' AND PARENTNODE = 11
union all
select T.NODE , T.PARENTNODE , T.ID from @Temp T INNER JOIN CTE ON CTE.NODE = T.PARENTNODE
)
SELECT * FROM CTE
ORDER BY NODE
父节点的结果= 1:
NODE PARENTNODE ID
----------- ----------- ----------
2 1 DEF
3 2 ABC1
4 2 ABC2
5 4 ABCC3
6 5 XYZ3
父节点的结果= 11:
NODE PARENTNODE ID
----------- ----------- ----------
22 11 DEF
23 22 DEF1
24 23 DEF2
25 23 DEF3
26 23 DEF4
27 22 DEF5
28 27 DEF6
答案 2 :(得分:0)
如果您使用Oracle,您可能需要查看Hierarchical Queries。
START WITH指定层次结构的根行。
CONNECT BY指定层次结构的父行和子行之间的关系。
听起来就像你想要达到的目标。
答案 3 :(得分:0)
不幸的是,SAP HANA数据库引擎现在不支持SQL Recursive CTE queries。
如果您运行的是HANA 2.0,则可以使用Hierarchy功能查询数据库中的父子关系。请查看https://www.youtube.com/watch?v=7jUzCtxTnkA以获取教程