父子孙子层次结构检索



>我需要一些帮助来检索父子孙子等

这就是我的数据的样子

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 以获取教程

最新更新