HANA中的层次结构查询
最近要在HANA中使用层次结构查询,网上随便翻了一下,都说HANA和ORACLE的层次查询语法一样,实际使用发现根本不能用。实在是无语 ,没有验证的内容到处传,浮燥啊,浮燥。
去官网找了好久HANA明确不支持Oracle的层级查询方式,HANA的层次查询使用了一个叫hierarchy函数来实现,相关用法如下:
先构造两个简单的2层结构
WITH t AS (
SELECT '1' p,'1.1' c FROM dummy UNION
SELECT '1' p,'1.2' c FROM dummy UNION
SELECT '1' p,'1.3' c FROM dummy UNION
SELECT '1.2' p,'1.2.1' c FROM dummy UNION
SELECT '2' p,'2.1' c FROM dummy UNION
SELECT '2' p,'2.2' c FROM dummy UNION
SELECT '2' p,'2.3' c FROM dummy UNION
SELECT '2.1' p,'2.1.1' c FROM dummy
)
SELECT * FROM hierarchy (
SOURCE (SELECT p parent_id,c node_id FROM t)
START WHERE p IN ('1','2')
)
查询结果:
WITH t AS ( SELECT '1' p,'1.1' c FROM dummy UNION SELECT '1' p,'1.2' c FROM dummy UNION SELECT '1' p,'1.3' c FROM dummy UNION SELECT '1.2' p,'1.2.1' c FROM dummy UNION SELECT '2' p,'2.1' c FROM dummy UNION SELECT '2' p,'2.2' c FROM dummy UNION SELECT '2' p,'2.3' c FROM dummy UNION SELECT '2.1' p,'2.1.1' c FROM dummy ) SELECT * FROM hierarchy ( SOURCE (SELECT p parent_id,c node_id FROM t) START WHERE p IN ('1','2') ) | ||||||||
---|---|---|---|---|---|---|---|---|
HIERARCHY_RANK | HIERARCHY_TREE_SIZE | HIERARCHY_PARENT_RANK | HIERARCHY_ROOT_RANK | HIERARCHY_LEVEL | HIERARCHY_IS_CYCLE | HIERARCHY_IS_ORPHAN | PARENT_ID | NODE_ID |
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1.1 |
2 | 2 | 0 | 2 | 1 | 0 | 0 | 1 | 1.2 |
3 | 1 | 2 | 2 | 2 | 0 | 0 | 1.2 | 1.2.1 |
4 | 1 | 0 | 4 | 1 | 0 | 0 | 1 | 1.3 |
5 | 2 | 0 | 5 | 1 | 0 | 0 | 2 | 2.1 |
6 | 1 | 5 | 5 | 2 | 0 | 0 | 2.1 | 2.1.1 |
7 | 1 | 0 | 7 | 1 | 0 | 0 | 2 | 2.2 |
8 | 1 | 0 | 8 | 1 | 0 | 0 | 2 | 2.3 |
这里父结点和子结点的名称固定为 parent_id和node_id,hierarchy根据这两个字段来确定父结点和子结点,上图给出的是由上层向下层查询,如果要逆向查询,可以把parent_id和node_id名字对换一下即可。
HIERARCHY_RANK:结点编号
HIERARCHY_TREE_SIZE:当前树包含的结点数
HIERARCHY_PARENT_RANK:当前结点的父结点编号
HIERARCHY_ROOT_RANK:当前结点的根结点编号
HIERARCHY_LEVEL:当前结点层级
HIERARCHY_IS_CYCLE:不知道是啥
HIERARCHY_IS_ORPHAN:不知道是啥
post SAP-Garson
原文链接:https://blog.csdn.net/usoa/article/details/117748139文章来自于网络,如果侵犯了您的权益,请联系站长删除!