我已经找到了使用两个层次化的CONNECT BY查询在Oracle中使用UNION ALL的解决方案,一个查询祖先,另一个查询子代。
我希望在DB2和SQL Server中实现相同的效果。
我知道层次结构中的一个元素可以是根、分支或叶子。我需要获取它的整个层次结构。
我希望你能提供这样的结果:
如果运行上述SQL,我可以得到正确的祖先。但是,如果我去掉注释,它似乎会进入无限循环。必须有一种方法使其工作。
我能够在一个方向上(祖先或孩子)获得层次结构结果,但我不能在单个查询中同时获得两个方向的结果。
有人尝试过这样的事情吗?
谢谢
我希望在DB2和SQL Server中实现相同的效果。
我知道层次结构中的一个元素可以是根、分支或叶子。我需要获取它的整个层次结构。
假设我有itemid='item3' and class='my class',我需要找到它的祖先和子代,我想到了:
with ancestor (class, itemid, parent, base, depth)
as (
select root.class, root.itemid, root.parent, root.itemid, 0
from item root
where root.class = 'myclass'
and root.itemid = 'item3'
-- union all
-- select child.class, child.itemid, child.parent, root.base, root.depth+1
-- from ancestor root, item child
-- where child.class = root.class
-- and child.parent = root.itemid
union all
select parent.class, parent.itemid, parent.parent, parent.itemid, root.depth-1
from ancestor root, item parent
where parent.class = root.class
and parent.itemid = root.parent
)
select distinct class, itemid, parent, base, depth
from ancestor
order by class, base, depth asc, itemid
我希望你能提供这样的结果:
我想要这样的结果:
class itemid parent base depth
myclass item1 null item3 -2
myclass item2 item1 item3 -1
myclass item3 item2 item3 0
myclass item4 item3 item3 1
myclass item5 item5 item3 2
如果运行上述SQL,我可以得到正确的祖先。但是,如果我去掉注释,它似乎会进入无限循环。必须有一种方法使其工作。
我能够在一个方向上(祖先或孩子)获得层次结构结果,但我不能在单个查询中同时获得两个方向的结果。
有人尝试过这样的事情吗?
谢谢