我的問題是如何標記在返回的行標識符,會告訴我返回row.id是否有更多的孩子遞歸獲取與識別層次結構孩子haschildren
Sample Data
id parenId Name parentName
9 8 nine eight
8 7 eight seven
6 8 six eight
5 8 five eight
4 8 four eight
3 8 three eight
2 1 two one
1 1 one one
12 7 tweleve seven
11 12 eleven twelve
如果我通過的parentId在此查詢7低於它返回我
8 7 eight
6 8 six
5 8 five
4 8 four
3 8 three
12 7 tweleve
11 12 eleven
但我要的是有更多的孩子被標記,例如8和12有更多的孩子ID
8 7 eight haschidlren
6 8 six
5 8 five
4 8 four
3 8 three
12 7 tweleve haschidlren
11 12 eleven
WITH name_tree
AS (SELECT Id,
Parentid,
Name,
ParentName
FROM TableWithHiearchy
WHERE Parentid = 7
-- this is the starting point you want in your recursion
UNION ALL
SELECT c.Id,
c.Parentid,
c.Name,
ParentName
FROM TableWithHiearchy c
JOIN name_tree p
ON p.Id = c.ParentId -- this is the recursion
AND c.Id <> c.Parentid
)
SELECT distinct Id, parenId, Name
FROM name_tree
你可以只添加一列CTE像'hasChildren = case(如果存在)(從父表項的表中選擇1 id = c.id then 1 else 0 end)'然後在遞歸CTE的第一部分給出'TableWithHiearchy'別名'c' – ZLK
不確定我是否跟隨你的最後一部分「然後在遞歸CTE的第一部分給TableWithHiearchy別名c「 –
像'WITH name_tree AS(SELECT Id,Parentid,Name,ParentName,hasChildren = case exists when exists(從tablewithhierarchy中選擇1,其中parentid = c.id)then 1 else 0 end FROM TableWithHiearchy AS c WHERE Parentid = 7 ' – ZLK