分层查询输出错误

时间:2015-09-17 10:49:06

标签: sql sql-server

这是我的代码:

  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已经用尽   在声明完成之前。

我检查了表格,没有行指向自己的行(无穷大)。

我的问题在哪里?

2 个答案:

答案 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)