CTE 显示所有传递相关的元素(兄弟姐妹)

CTE to show all transitively related elements (siblings)

我有一个 table 兄弟姐妹,其 ID 列为 Child1 和 Child2:

Child1 Child2
1 2
2 3
4 6
5 1
create table Siblings (Child1 int, Child2 int)
insert into Siblings values (1,2)
insert into Siblings values (2,3)
insert into Siblings values (4,6)
insert into Siblings values (5,1)

对于每一行,Child1 是 Child2 的兄弟(反之亦然,因为兄弟关系是对称的)例如1 是上面 table 第一行中 2 的兄弟姐妹。又因为1是2的兄弟,2是3的兄弟,那么1也是3的兄弟(兄弟关系是传递的)。使用 TSQL 如何显示上面 table 中明显的所有兄弟关系?我假设这里需要使用递归通用 table 表达式 (CTE)。我今天才开始深入研究 CTE,所以我对如何解决这个问题感到有些困惑。我希望看到这样的输出:

Child Sibling
1 2
1 3
1 5
2 1
2 3
2 5
3 1
3 2
3 5
4 6
5 1
5 2
5 3
6 1

或一个 select 语句,它将简单地显示所有 Child ID 是给定 Child ID 的兄弟姐妹。非常感谢任何帮助,谢谢!

不知道是否有使用 CTE 执行此操作的好方法。这里有一些有用的东西,如果没有别的,你可以用它来测试其他解决方案...

Drop Table If Exists #Siblings
Create Table #Siblings(Child1 Int, Child2 Int)
Insert Into #Siblings values (1,2),(2,3),(4,6),(5,1)

Drop Table If Exists #Res
Create Table #Res(C1 Int, C2 Int)

Insert Into #Res(C1, C2)
Select Child1, Child2 From #Siblings
Union
Select Child2, Child1 From #Siblings

Declare @RC Int = 1
While @RC > 0
Begin
  Insert Into #Res(C1, C2)
  Select R1.C1, R2.C2
  From
    #Res As R1
    Inner Join #Res As R2
      On R1.C2 = R2.C1
  Where Not Exists(Select *
                   From #Res As NoDupes
                   Where NoDupes.C1 = R1.C1 And NoDupes.C2 = R2.C2)
  Set @RC = @@ROWCOUNT
End
Select Distinct * From #Res Where C1 != C2 Order By 1, 2