【发布时间】:2017-09-06 22:35:56
【问题描述】:
场景:
我的表中有以下层次结构格式的数据:
PERSON_ID Name PARENT_ID
1 Azeem 1
2 Farooq 2
3 Ahsan 3
4 Waqas 1
5 Adnan 1
6 Talha 2
7 Sami 2
8 Arshad 2
9 Hassan 8
例如
Hassan 是 parent_id 8 的孩子,即 (Arshad)
并且 Arshad 是 parent_id 2 的孩子,即 (Farooq)
我想要什么:
首先,我想找到特定 parent_id 的 parent 的所有 parent。
例如:如果我想找到 Hassan 的父级,那么我也得到 Hassan 的父级并得到它的父级 (Hassan -> Arshad -> Farooq)
其次,我想找到 Farooq 的所有孩子,例如 (Farooq -> Arshad -> Hassan)
第三,如果 Azeem 也有像 (Azeem -> Azeem) 一样的父级,那么给我看这条记录。
我已经尝试过的:
DECLARE @id INT
SET @id = 9
;WITH T AS (
SELECT p.PERSON_ID,p.Name, p.PARENT_ID
FROM hierarchy p
WHERE p.PERSON_ID = @id AND p.PERSON_ID != p.PARENT_ID
UNION ALL
SELECT c.PERSON_ID,c.Name, c.PARENT_ID
FROM hierarchy c
JOIN T h ON h.PARENT_ID = c.PERSON_ID)
SELECT h.PERSON_ID,h.Name FROM T h
它向我显示以下错误:
语句终止。在语句完成之前,最大递归 100 已用完。
【问题讨论】:
-
我删除了mysql 标签,因为我怀疑您使用的是 MySQL。看起来您使用的是 Microsoft SQL Server,所以我添加了该标签。
-
@BillKarwin 我很感激。
-
您的数据中有一个无限循环:
Azeem是他自己的父母。您需要将值设为NULL或将您的条件更改为WHERE p.parent_id = @id AND p.parent_id != p.child_id。
标签: sql sql-server hierarchical-data