我的内存力很差。每当我在Oracle中执行CONNECT BY查询时-每次都意味着-我必须认真思考,通常通过反复试验来确定PRIOR应该使用哪个参数。

我不知道为什么我不记得-但是我不知道。

有没有人有方便的内存助记符,所以我总是记得吗?

例如:

要从节点将向下向下移动一棵树-显然,我必须查找它:)-您可以执行以下操作:

select
    *
from
    node
connect by
    prior node_id = parent_node_id
start with
    node_id = 1

所以-我从node_id为1(分支的顶部)开始,查询查找parent_node_id = 1的所有节点,然后向下迭代到树的底部。

要使树上升到树,先要在父树上进行:
select
    *
from
    node
connect by
    node_id = prior parent_node_id
start with
    node_id = 10

因此,从分支的某个地方开始(在本例中为node_id = 10),Oracle首先获取parent_node_idnode_id为10的节点相同的所有节点。

编辑:我仍然弄错了,所以我想添加一个澄清的编辑以扩展接受的答案-这是我现在记得的方式:
select
    *
from
    node
connect by
    prior node_id = parent_node_id
start with
    node_id = 1

我现在将这个SQL的“英语”版本读为...



编辑:Quassnoi很有意思-编写SQL的顺序使事情变得容易得多。
select
    *
from
    node
start with
    node_id = 1
connect by
    parent_node_id = prior node_id

这让我感觉很清楚-“开始于”给出了选择的第一行,“连接依据”给出了下一行(在这种情况下,node_id的子代= 1)。

最佳答案

考虑要选择记录的顺序:每条记录上的链接后列必须与选定的PRIOR记录上的链接前列相匹配。

10-04 11:17