代码之家  ›  专栏  ›  技术社区  ›  Wudang

检测父子关系中的循环

  •  4
  • Wudang  · 技术社区  · 15 年前


    欢迎对先前讨论提出更好的建议或建议。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Andomar    15 年前

    with prev as (
        select RowId, 1 AS GenerationsRemoved
        from YourTable
        union all
        select RowId, prev.GenerationsRemoved + 1
        from prev
        inner join YourTable on prev.RowId = ParentRowId
        and prev.GenerationsRemoved < 55
    )
    select * 
    from prev
    where GenerationsRemoved > 50
    

    这确实需要您指定一个最大递归级别:在本例中,CTE运行到55,并且它选择具有50个以上子级的错误行。