我的内存力很差。每当我在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_id
与node_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记录上的链接前列相匹配。