需要从分层表中进行非规范化查询

时间:2013-07-11 21:58:42

标签: sql oracle plsql

我有一个表(让它命名为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。

2 个答案:

答案 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