SQL - 多级自连接
SQL - Multi level self join
我有一个 table 具有这样的父子关系 - Isfinal 列表明它是该级别的最终元素
ID name ParentId Isfinal
1 abc 0 No
2 acd 1 No
3 ads 1 No
4 xyz 2 No
5 xxy 2 Yes
6 plm 3 No
7 ytr 4 Yes
8 lks 6 Yes
我正在尝试编写一个动态查询,它将给出该 ID 的子元素。
例如
如果我 select 2 那么它应该给出结果 -
ID name ParentId Isfinal
4 xyz 2 No
5 xxy 2 Yes
7 ytr 4 Yes
是否可以自行加入?
使用递归 CTE,你可以解决这个问题。
DECLARE @TABLE TABLE
( ID int
,name nvarchar(200)
,ParentId int
,Isfinal nvarchar(20)
)
INSERT INTO @TABLE
VALUES (1,'abc',0,'No'),(2,'acd',1,'No'),(3,'ads',1,'No'),
(4,'xyz',2,'No'),(5,'xxy',2,'Yes'),(6,'plm',3,'No'),
(7,'ytr',4,'Yes'),(8,'lks',6,'Yes')
DECLARE @ID INT = 2
;WITH CTE
AS
(
SELECT ID,name,ParentId,Isfinal
FROM @TABLE
WHERE ParentId = @ID
UNION ALL
SELECT T.ID,T.name,T.ParentId,T.Isfinal
FROM @TABLE T
INNER JOIN CTE C ON C.ID = T.ParentId
)
SELECT * FROM CTE
我有一个 table 具有这样的父子关系 - Isfinal 列表明它是该级别的最终元素
ID name ParentId Isfinal
1 abc 0 No
2 acd 1 No
3 ads 1 No
4 xyz 2 No
5 xxy 2 Yes
6 plm 3 No
7 ytr 4 Yes
8 lks 6 Yes
我正在尝试编写一个动态查询,它将给出该 ID 的子元素。
例如
如果我 select 2 那么它应该给出结果 -
ID name ParentId Isfinal
4 xyz 2 No
5 xxy 2 Yes
7 ytr 4 Yes
是否可以自行加入?
使用递归 CTE,你可以解决这个问题。
DECLARE @TABLE TABLE
( ID int
,name nvarchar(200)
,ParentId int
,Isfinal nvarchar(20)
)
INSERT INTO @TABLE
VALUES (1,'abc',0,'No'),(2,'acd',1,'No'),(3,'ads',1,'No'),
(4,'xyz',2,'No'),(5,'xxy',2,'Yes'),(6,'plm',3,'No'),
(7,'ytr',4,'Yes'),(8,'lks',6,'Yes')
DECLARE @ID INT = 2
;WITH CTE
AS
(
SELECT ID,name,ParentId,Isfinal
FROM @TABLE
WHERE ParentId = @ID
UNION ALL
SELECT T.ID,T.name,T.ParentId,T.Isfinal
FROM @TABLE T
INNER JOIN CTE C ON C.ID = T.ParentId
)
SELECT * FROM CTE