我对二叉树有一个棘手的要求
这就是我的数据的样子
ID IDNEXT
1A 2E
3D 4A
2E 6F
6F 3D
4A
我的输出应该在此fashin中
ID IDNEXT
1A 2E
2E 6F
6F 3D
3D 4A
4A
根据当前的IDNEXT,我应该为mynext ID,我们应该继续这样,直到结尾和深度未知为止
任何建议
预先感谢
答案 0 :(得分:0)
我不熟悉Hana,但是在标准SQL中,您可以使用递归CTE(公用表表达式)。
以下示例已在PostgreSQL上进行了测试:
CREATE TABLE links(id VARCHAR(10), idnext VARCHAR(10));
INSERT INTO links(id, idnext) values('1a','2e'), ('3d','4a'), ('2e','6f'), ('6f', '3d');
WITH RECURSIVE cte AS (
SELECT id, idnext FROM links WHERE id='1a' -- the first node
UNION ALL
SELECT links.id, links.idnext
FROM links
JOIN cte
ON links.id = cte.idnext
)
SELECT * FROM cte;
结果:
id | idnext
----+--------
1a | 2e
2e | 6f
6f | 3d
3d | 4a
答案 1 :(得分:0)
正如我的评论中所述,SAP HANA提供了Hierarchy-Functions,可以非常有效地处理通过“节点” /“父节点”方案在表中编码的层次结构数据。
此问题的要求可以表示为“先深度遍历有向图,然后按访问顺序返回被访问的节点”。。
具有易于执行的层次结构功能:
create column table con (ID nvarchar(2) not null
, IDNEXT nvarchar(2) not null);
/*
ID IDNEXT
1A 2E
3D 4A
2E 6F
6F 3D
4A
*/
insert into con values ('1A', '2E');
insert into con values ('3D', '4A');
insert into con values ('2E', '6F');
insert into con values ('6F', '3D');
insert into con values ('4A', '');
SELECT
hierarchy_rank AS rank,
node_id,
parent_id
FROM HIERARCHY (
SOURCE (SELECT ID as "NODE_ID"
, IDNEXT as "PARENT_ID"
FROM con)
START WHERE IDNEXT =''
)
ORDER BY
hierarchy_rank desc;
/*
RANK NODE_ID PARENT_ID
5 1A 2E
4 2E 6F
3 6F 3D
2 3D 4A
1 4A
*/
这种方法得益于
具有这些特殊功能的最大障碍可能是,它们需要仔细考虑要定义的层次结构/图形。幸运的是, SAP HANA学院提供了一些教程videos。