这是我的代码:
with tbl as
(
Select parent_b.BRANCH_ID, parent_b.BRANCH_CODE,
parent_b.BRANCH, parent_b.PARENT_BRANCH_ID
from table parent_b
Where parent_b.branch_Id = 1
UNION ALL
Select child_b.BRANCH_ID, child_b.BRANCH_CODE,
child_b.BRANCH, child_b.PARENT_BRANCH_ID
from table child_b
INNER JOIN tbl parent
ON parent.branch_id = child_b.branch_id
)
select * from tbl
OPTION(MAXRECURSION 32767)
上面的代码让我误以为这条消息:
声明终止。最大递归100已经用尽 在声明完成之前。
我检查了表格,没有行指向自己的行(无穷大)。
我的问题在哪里?
答案 0 :(得分:2)
CTE的递归部分存在逻辑错误 - 连接条件:
ON parent.branch_id = child_b.branch_id
将父母branch_id
直接链接到孩子的branch_id
,当它应该链接到孩子的parent_branch_id
时 - 就像这样:
ON parent.branch_id = child_b.parent_branch_id
以下查询应该有效:
with tbl as
(
Select parent_b.BRANCH_ID, parent_b.BRANCH_CODE,
parent_b.BRANCH, parent_b.PARENT_BRANCH_ID
from table parent_b
Where parent_b.branch_Id = 1
UNION ALL
Select child_b.BRANCH_ID, child_b.BRANCH_CODE,
child_b.BRANCH, child_b.PARENT_BRANCH_ID
from table child_b
INNER JOIN tbl parent
ON parent.branch_id = child_b.parent_branch_id
)
select * from tbl
OPTION(MAXRECURSION 32767)
答案 1 :(得分:0)
在查询末尾指定maxrecursion选项:
select *
from tbl
option (maxrecursion 0)