Oracle分层查询:具有NodeId和NodeType两个节点属性

时间:2014-07-01 04:16:00

标签: oracle11g hierarchical-data recursive-query

我有以下用例,我希望利用分层查询来获得所需的结果。

在我的用例中,我有两种类型的节点说' A'和' B'。因此节点的唯一标识符是其ID和类型。

现在问题是当两个节点具有相同的Id和不同的类型时,当我只在id上调用connect by子句时我也得到其他类型节点的子节点(如果该节点的id是相同的 )。

create table TreeTest (
nodeid integer,
nodetype char(1),
parentid integer,
parenttype char(1)
);

此特定用例的表格中的数据:

   1, 'A', NULL, null
   2, 'A', 1, 'A'
   3, 'A', 1, 'A'   
   2, 'B', NULL, null
   3, 'B', 2, 'B'

现在我正在触发以下查询(没有给出正确的结果)

SELECT * FROM TREETEST
START WITH PARENTID = 1
CONNECT BY PRIOR nodeid = PARENTID;

我也尝试了以下查询,但又错误的结果

SELECT * FROM TREETEST
START WITH PARENTID = 1 AND PARENTTYPE = 'A'
CONNECT BY PRIOR nodeid = PARENTID AND NODETYPE = PARENTTYPE;

请提供正确的查询,并且还要解释为什么第二个查询无效。

预期产出:

2   A   1   A
3   A   1   A

1 个答案:

答案 0 :(得分:1)

SELECT *
FROM treeTest
START WITH parentId = 1
    AND parentType = 'A'
CONNECT BY PRIOR nodeId = parentId
    AND PRIOR nodeType = parentType
;

说明:PRIOR是应用于列名的运算符,而不是整个条件。