我有以下用例,我希望利用分层查询来获得所需的结果。
在我的用例中,我有两种类型的节点说' 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
答案 0 :(得分:1)
SELECT *
FROM treeTest
START WITH parentId = 1
AND parentType = 'A'
CONNECT BY PRIOR nodeId = parentId
AND PRIOR nodeType = parentType
;
说明:PRIOR
是应用于列名的运算符,而不是整个条件。