场景:查询获取针对特定孩子的父母记录或针对父母获取孩子记录的查询是什么?
我在我的桌子下面的层级格式的数据:
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
如
哈桑是PARENT_ID 8是儿童(艾尔沙德)
和Arshad是parent_id 2的子代,它是(Farooq)
我想要什么:
首先,我想找到所有父母的特定parent_id。
例如:如果我想找到哈桑的父母,然后我也得到哈桑的父母也得到其父(哈桑 - >艾尔沙德 - >法鲁克)
其次,我想找到的所有子(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
及其显示我以下错误:
The statement terminated. The maximum recursion 100 has been exhausted before statement completion.
我删除了[tag:mysql]标签,因为我怀疑你使用的是MySQL。它看起来像你正在使用Microsoft SQL Server,所以我添加了该标签。 –
@BillKarwin我很感激。 –
你的数据有一个无限循环:'Azeem'是他自己的父母。您需要将值为NULL或将您的条件更改为WHERE p.parent_id = @id AND p.parent_id!= p.child_id'。 – Dai