迭代SQL查询
我对二叉树有一个棘手的要求 这就是我的数据的样子迭代SQL查询,sql,hana,Sql,Hana,我对二叉树有一个棘手的要求 这就是我的数据的样子 ID IDNEXT 1A 2E 3D 4A 2E 6F 6F 3D 4A 我的输出应该是这样的 ID IDNEXT 1A 2E 2E 6F 6F 3D 3D 4A 4A 基于当前的ID,下一个应该是我的下一个ID,我们应该继续这样,直到结束和深度未知 有什么建议吗 提前感谢我不熟悉Hana,但在标准SQL中,您可以使用递归C
ID IDNEXT
1A 2E
3D 4A
2E 6F
6F 3D
4A
我的输出应该是这样的
ID IDNEXT
1A 2E
2E 6F
6F 3D
3D 4A
4A
基于当前的ID,下一个应该是我的下一个ID,我们应该继续这样,直到结束和深度未知
有什么建议吗
提前感谢我不熟悉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
正如我在评论中提到的,SAP HANA提供了一种非常有效的方法,允许通过“节点”/“父节点”方案对表中编码的层次结构数据进行非常高效的处理 该问题的要求可以表述为“首先遍历有向图深度,然后按访问顺序返回访问的节点” 使用易于执行的层次结构函数:
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中高效(空间和时间)实现层次结构处理,而不是通过SQL函数模拟功能。当结构自动缓存时,应该重用相同的层次结构时,这一点特别方便
使用这些特殊函数的最大障碍可能是,它们需要精确地考虑要定义的层次结构/图。幸运的是,SAP HANA Academy提供了一些指导 是否有任何列可以表示顺序?不幸的是HANA不支持递归。。我认为我们必须使用cursor和loop的任何建议,可以使用cursors和loop吗?这是正确的,HANA不支持递归公共表表达式或函数/过程调用。但是,它确实支持可用于处理此类自引用数据集的层次结构函数。我不建议在这里使用游标或循环。