如何查找无向图的所有连接子图

对于我正在努力解决的问题,我需要一些帮助。


表格示例:


ID |Identifier1 | Identifier2 

---------------------------------

1  |      a     | c         

2  |      b     | f         

3  |      a     | g         

4  |      c     | h        

5  |      b     | j         

6  |      d     | f         

7  |      e     | k  

8  |      i     |          

9  |      l     | h    

我想在两列之间对彼此相关的标识符进行分组,并分配一个唯一的组ID。


所需输出:


Identifier | Gr_ID    |    Gr.Members                 

---------------------------------------------------

a       |      1      |   (a,c,g,h,l)  

b       |      2      |   (b,d,f,j)       

c       |      1      |   (a,c,g,h,l)  

d       |      2      |   (b,d,f,j)       

e       |      3      |   (e,k)                 

f       |      2      |   (b,d,f,j)       

g       |      1      |   (a,c,g,h,l)  

h       |      1      |   (a,c,g,h,l)  

j       |      2      |   (b,d,f,j)       

k       |      3      |   (e,k)                 

l       |      1      |   (a,c,g,h,l)  

i       |      4      |   (i)  

注意:“ Gr.Members”列不是必需的,大部分用于更清晰的视图。


因此,组的定义是:如果一行与该组的至少一行共享至少一个标识符,则该行属于该组


但是必须将组ID分配给每个标识符(由两列的并集选择)而不是行。


关于如何构建查询以提供所需输出的任何帮助?


谢谢。


更新:以下是一些带有预期输出的额外样本集。


给定表:


Identifier1 | Identifier2   

----------------------------

    a       |   f

    a       |   g

    a       |  NULL

    b       |   c

    b       |   a

    b       |   h

    b       |   j

    b       |  NULL

    b       |  NULL

    b       |   g

    c       |   k

    c       |   b

    d       |   l

    d       |   f

    d       |   g

    d       |   m

    d       |   a

    d       |  NULL

    d       |   a

    e       |   c

    e       |   b

    e       |  NULL

预期的输出:所有记录应属于同一组,组ID = 1。


给定表:


Identifier1 | Identifier2

--------------------------

a           |   a

b           |   b

c           |   a

c           |   b

c           |   c

预期的输出:记录应该在同一组中,组ID = 1。


慕容708150
浏览 702回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server