如何为 Oracle 11g 中分层表的每条记录分配父组 ID?
Posted
技术标签:
【中文标题】如何为 Oracle 11g 中分层表的每条记录分配父组 ID?【英文标题】:How to assign the Parent Group IDs to each record of a hierarchical table in Oracle 11g? 【发布时间】:2014-06-07 10:31:48 【问题描述】:根据 TECH_VALUES 表中存在的以下示例分层数据,我如何创建一个视图,例如 TECH_VALUES_VW,它将采用相同的数据但有一个附加列,即 GROUP_ID_PARENT,它将显示父组所在的组 ID id 为 0 对子所属的行,请参阅新列数据示例:
ID GROUP_ID LINK_ID PARENT_GROUP_ID TECH_TYPE GROUP_ID_PARENT
------- ------------- ------------ -------------------- ---------- ---------------
1 100 LETTER_A 0 100
2 200 LETTER_B 0 200
3 300 LETTER_C 0 300
4 400 LETTER_A1 100 A 100
5 500 LETTER_A2 100 A 100
6 600 LETTER_A3 100 A 100
7 700 LETTER_AA1 400 B 100
8 800 LETTER_AAA1 700 C 100
9 900 LETTER_B2 200 B 200
10 1000 LETTER_BB5 900 B 200
12 1200 LETTER_CC1 300 C 300
13 1300 LETTER_CC2 300 C 300
14 1400 LETTER_CC3 300 A 300
15 1500 LETTER_CCC5 1400 A 300
16 1600 LETTER_CCC6 1500 C 300
17 1700 LETTER_BBB8 900 B 200
18 1800 LETTER_B 0 1800
19 1900 LETTER_B2 1800 B 1800
20 2000 LETTER_BB5 1900 B 1800
21 2100 LETTER_BBB8 1900 B 1800
所以基于以上,我想取表定义:
Table Name: TECH_VALUES:
ID,
GROUP_ID,
LINK_ID
PARENT_GROUP_ID,
TECH_TYPE
并创建一个新视图
View Name: TECH_VALUES_VW:
ID,
GROUP_ID,
LINK_ID
PARENT_GROUP_ID,
TECH_TYPE,
GROUP_ID_PARENT
基于 TECH_VALUES 表中的上述示例数据。
我希望创建一个新查询来构建这个新视图,该视图将只使用每行 0 的 PARENT_GROUP_ID 的 GROUP_ID。
更新
如果我只取出 TECH_VALUES 表中 PARENT_GROUP_ID 为 0 的记录,即让事情变得更清楚,我所追求的是什么,即
ID GROUP_ID LINK_ID PARENT_GROUP_ID
------- ------------- ------------ --------------------
1 100 LETTER_A 0
2 200 LETTER_B 0
3 300 LETTER_C 0
18 1800 LETTER_B 0
仅使用这 4 条记录的 GROUP_ID 值,将此 GROUP_ID 作为 TECH_VALUES_VW 中的新列分配给每个父链接 ID 的所有子记录以及原始链接 ID(其中 PARENT_GROUP_ID 为 0)如上面的示例数据集所示。
【问题讨论】:
这个不清楚。我明白当父组 id 为 0 时你想要什么,但当它是其他东西时不明白。 Dan,请查看我对原始线程的更新 - 希望它更清晰。 How to Perform Counts on a Oracle Hierarchical Table based on Parent Link的可能重复 【参考方案1】:如果我正确理解了您的问题,那么这可能就是您所追求的:
CREATE OR REPLACE VIEW tech_values_vw
AS
SELECT TV.*,
CASE WHEN LEVEL = 1 THEN group_id ELSE connect_by_root(group_id) END AS group_id_parent
FROM tech_values TV
START WITH parent_group_id = 0
CONNECT BY PRIOR group_id = parent_group_id
;
【讨论】:
以上是关于如何为 Oracle 11g 中分层表的每条记录分配父组 ID?的主要内容,如果未能解决你的问题,请参考以下文章