我有一个表(让它命名为HEIRARCHY_TABLE),这种格式表示以这种格式存储树的分层数据。
HEIRARCHY_TABLE (parent_name ,parent_id ,child_name ,child_id)
Sample Data in HEIRARCHY_TABLE:-
-------------------------------------------
parent_name |parent_id |child_name |child_id
--------------------------------------------
parent_1 | parent_1_id | leaf_node | leaf_node_id1
parent_2 | parent_2_id | parent_1 | parent_1_id
上述场景显示了parent_2-> parent_1-> leaf_node的情况的数据 哪里 - >代表“是”关系的父母。
我需要查询此表并为所有叶节点获取这样的结果。 结果: -
leaf_node | parent_1 | parent_2 | parent_3 | parent_4 | parent_5 | parent_6 | parent_7
如果假设一个叶子节点只有两个父节点,那么我需要其余的父值为null。 ie ..,如果它只有5个parent.then parent_6和parent_7应为null。 注意: - 上面的表包含多个树。它包含多个根。我需要这个格式的表中所有树的数据。所有树中的最大级别仅为7。
答案 0 :(得分:0)
最快的查询是使用heirarchy IDs。然后,您可以在层次结构id列上使用CONTAINS查询全部或部分树。
当然,这假设您可以/可以构建此列。
对于oracle,你可以进行Heirarchy Query。不确定它的效率/去正规化因素。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm
答案 1 :(得分:0)
Google围绕Common Table Expressions。我认为,您正在寻找的是递归查询。您将不得不玩一些游戏来强制查询为实际不存在的父级返回空值。 [检查一下。](http://www.morganslibrary.org/reference/with.html)