【发布时间】:2014-03-17 10:57:13
【问题描述】:
我在 SQL Server 数据库中有一个层次结构。我正在尝试编写一个查询来获取给定元素下结构中的所有元素。
所以,给定一个包含 id 和 parent_id 列的 DB 表,这就是我要做的:
WITH recursive_cte (root_id, id) AS (
SELECT parent_id, id
FROM test_cte
UNION ALL
SELECT t.parent_id, r.id
FROM test_cte t
INNER JOIN recursive_cte r
ON (r.root_id=t.id)
)
SELECT *
FROM recursive_cte
WHERE root_id=0
现在,如果在 id=0 元素下的结构中存在循环引用,我会从 DBMS 收到一个错误(在语句完成之前,最大递归 100 已用尽)。这很好,循环引用的存在已经是一个错误。
但是如果我在另一个元素下的结构中有循环引用,查询总是会报错。即使我指定了将记录集限制为非循环的条件(例如WHERE root_id=0)。
例如在:
id|parent_id|name |
--+---------+---------------+
0 |NULL |TEST A |
1 |4 |TEST CIRCULAR |
2 |0 |TEST B |
3 |2 |TEST C |
4 |1 |TEST CIRCULAR B|
我希望我的查询在条件root_id=0 下正常工作。有没有办法做到这一点?
【问题讨论】:
标签: sql sql-server recursion recursive-query