Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迭代SQL查询_Sql_Hana - Fatal编程技术网

迭代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不支持递归公共表表达式或函数/过程调用。但是,它确实支持可用于处理此类自引用数据集的层次结构函数。我不建议在这里使用游标或循环。