>我需要一些帮助来检索父子孙子等
这就是我的数据的样子
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
因此,当用户查找父 ID = DEF 和父节点 = 1 时,我的结果应该是
NODE PARENTNODE ID
-------------------------
2 1 DEF
3 2 ABC1
4 2 ABC2
5 4 ABCC3
6 5 XYZ3
因此,当用户查找父 ID = DEF 和父节点 = 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 个级别。
任何帮助将不胜感激
提前致谢
使用应该使用一些额外的列,如世系、存储级别的深度和父级信息。您可以按照本文了解。
此脚本
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
如果您正在使用 Oracle,您可能需要查看分层查询。
START WITH 指定层次结构的根行。
CONNECT BY 指定层次结构的父行和子行之间的关系。
听起来正是您要实现的目标。
遗憾的是,SAP HANA 数据库引擎目前不支持 SQL 递归 CTE 查询。
如果运行的是 HANA 2.0,则可以使用层次结构函数查询数据库上的父子关系。请查看 https://www.youtube.com/watch?v=7jUzCtxTnkA 以获取教程