forked from hanaboy/SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHierarchy_SpanTree
111 lines (97 loc) · 2.35 KB
/
Hierarchy_SpanTree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
CREATE SCHEMA DEVTEST;
SET SCHEMA DEVTEST;
DROP TABLE test_hierarchy CASCADE;
CREATE COLUMN TABLE test_hierarchy (parent_id VARCHAR(1), node_id VARCHAR(1));
INSERT INTO test_hierarchy VALUES (null, 'A');
INSERT INTO test_hierarchy VALUES (null, 'X');
INSERT INTO test_hierarchy VALUES ('A', 'B');
INSERT INTO test_hierarchy VALUES ('A', 'C');
INSERT INTO test_hierarchy VALUES ('A', 'D');
INSERT INTO test_hierarchy VALUES ('B', 'E');
INSERT INTO test_hierarchy VALUES ('B', 'F');
INSERT INTO test_hierarchy VALUES ('C', 'G');
INSERT INTO test_hierarchy VALUES ('C', 'H');
INSERT INTO test_hierarchy VALUES ('D', 'G');
INSERT INTO test_hierarchy VALUES ('X', 'H');
INSERT INTO test_hierarchy VALUES ('F', 'G');
INSERT INTO test_hierarchy VALUES ('G', 'I');
INSERT INTO test_hierarchy VALUES ('G', 'J');
INSERT INTO test_hierarchy VALUES ('H', 'K');
-----------------------
SELECT
parent_id AS parent,
node_id AS node
FROM test_hierarchy
EXCEPT
SELECT
PARENT_ID AS parent,
NODE_ID AS node
FROM
HIERARCHY_SPANTREE (
SOURCE (
SELECT parent_id, node_id
FROM test_hierarchy
ORDER BY parent_id, node_id
)
);
-----------------------
SELECT
-- Hierarchy_SpanTree() generation
HIERARCHY_RANK AS rank,
HIERARCHY_TREE_SIZE AS treesize,
HIERARCHY_PARENT_RANK AS parent_rank,
HIERARCHY_LEVEL AS level,
HIERARCHY_IS_CYCLE AS cycle,
HIERARCHY_IS_ORPHAN AS orphan,
PARENT_ID AS parent,
NODE_ID AS node
FROM
HIERARCHY_SPANTREE (
SOURCE (
SELECT parent_id, node_id
FROM test_hierarchy
ORDER BY parent_id, node_id
)
);
-----------------------
SELECT
-- regular Hierarchy() generation
HIERARCHY_RANK AS rank,
HIERARCHY_TREE_SIZE AS treesize,
HIERARCHY_PARENT_RANK AS parent_rank,
HIERARCHY_LEVEL AS level,
HIERARCHY_IS_CYCLE AS cycle,
HIERARCHY_IS_ORPHAN AS orphan,
PARENT_ID AS parent,
NODE_ID AS node
FROM
HIERARCHY (
SOURCE (
SELECT parent_id, node_id
FROM test_hierarchy
ORDER BY parent_id, node_id
)
);
-----------------------
SELECT
parent_id AS parent,
node_id AS node
FROM test_hierarchy;
-----------------------
-- full syntax example from intro slide
/*
SET SCHEMA DEVTEST;
SELECT *
FROM
HIERARCHY_SPANTREE (
SOURCE (
SELECT parent_id, node_id
FROM test_hierarchy
ORDER BY parent_id, node_id
)
START WHERE node_id = 'X'
DEPTH 2
CACHE FORCE
)
ORDER BY hierarchy_rank ASC
*/