父子孙子层次结构检索

时间:2017-10-27 14:05:13

标签: sql hierarchical-data recursive-query hana

我想要帮助检索父子孙子等等

这就是我的数据的样子

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个级别。

任何帮助将不胜感激

提前致谢

4 个答案:

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